首页 > 解决方案 > RecyclerView、RecyclerView.Adapter和RecyclerView.LayoutManager在哪里声明?

问题描述

所以我有两个recycleView 的例子,一个在onCreate 方法中声明上述内容,另一个在MainActivity 中声明。有什么区别吗?一个是对还是错?猜猜这不是一个android概念,而是一个java概念。这是代码

package com.commonsware.jetpack.samplerj.recyclerview;

import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class MainActivity extends AppCompatActivity {
  private final Random random = new Random();

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    RecyclerView items = findViewById(R.id.items);
    ColorAdapter adapter = new ColorAdapter(getLayoutInflater());

    adapter.submitList(buildItems());
    items.setLayoutManager(new LinearLayoutManager(this));
    items.addItemDecoration(
      new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
    items.setAdapter(adapter);
  }

  private List<Integer> buildItems() {
    ArrayList<Integer> result = new ArrayList<>(25);

    for (int i = 0; i < 25; i++) {
      result.add(random.nextInt());
    }

    return result;
  }
}

和另一个例子

public class MyActivity extends Activity {
    private RecyclerView recyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager layoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);
        recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        // use this setting to improve performance if you know that changes
        // in content do not change the layout size of the RecyclerView
        recyclerView.setHasFixedSize(true);

        // use a linear layout manager
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        // specify an adapter (see also next example)
        mAdapter = new MyAdapter(myDataset);
        recyclerView.setAdapter(mAdapter);
    }
    // ...
}

标签: javaandroidandroid-recyclerview

解决方案


从我从问题和代码中可以理解的情况来看,我看到示例中的两个 recyclerviews 都在每个活动的 onCreate 方法中被调用,并且布局管理器也在 onCreate 方法中被分配。所以我认为那里没有区别。我实际上可以告诉你的是,这些示例都没有遵循 SOLID 原则。

尝试在此处阅读有关 SOLID 原则的信息:Medium about solid principle

此外,第二个示例似乎没有向布局管理器添加方向,而第一个示例使用 Item 装饰器来执行此操作。

我希望你的问题是正确的!


推荐阅读