java - 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);
}
// ...
}
解决方案
从我从问题和代码中可以理解的情况来看,我看到示例中的两个 recyclerviews 都在每个活动的 onCreate 方法中被调用,并且布局管理器也在 onCreate 方法中被分配。所以我认为那里没有区别。我实际上可以告诉你的是,这些示例都没有遵循 SOLID 原则。
尝试在此处阅读有关 SOLID 原则的信息:Medium about solid principle
此外,第二个示例似乎没有向布局管理器添加方向,而第一个示例使用 Item 装饰器来执行此操作。
我希望你的问题是正确的!
推荐阅读
- msal - 如何修复 msal.js 中 UserAgentApplication 的“TypeError:this.isCallback 不是函数”错误
- javascript - 如何在 .js 文件中创建函数并将其添加到另一个 .js 文件?
- arrays - 将 Array{Array{Float64},1} 转换为 Array{Float64,2} 的最佳方法,反之亦然
- java - 如何使用注释修复休眠?
- excel - 如何用两张表构建 Excel 并下载?
- python - obj 文件作为 Scene 对象而不是 Trimesh 对象加载
- celery - Django celery 不能同时运行多个时钟任务。有没有其他的出路?
- c# - 有什么办法可以加快使用 Google Play 游戏打开存档的速度吗?
- c++ - 为什么我的寄存器不包含我从 asm 计算的值
- php - 从不同位置的脚本获取相同的 Web 和文件路径