在Android中,使用RecyclerView可以实现列表的展示,并且可以使用不同的ViewHolders来展示不同的布局。在重新加载数据时,我们可以通过更改数据源来实现刷新列表的效果。
下面是一个使用不同的ViewHolders和在重新加载时更改数据的示例代码:
首先,在布局文件中定义RecyclerView:
activity_main.xml:
创建不同的ViewHolder类来展示不同的布局:
ViewHolderA.java:
public class ViewHolderA extends RecyclerView.ViewHolder {
public TextView textView;
public ViewHolderA(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.text);
}
}
ViewHolderB.java:
```java
public class ViewHolderB extends RecyclerView.ViewHolder {
public ImageView imageView;
public ViewHolderB(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.image);
}
}
创建RecyclerView的Adapter类,根据不同的数据类型返回不同的ViewHolder:
MyAdapter.java:
public class MyAdapter extends RecyclerView.Adapter {
private List dataList;
public MyAdapter(List dataList) {
this.dataList = dataList;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
if (viewType == 0) {
View view = inflater.inflate(R.layout.item_layout_a, parent, false);
return new ViewHolderA(view);
} else {
View view = inflater.inflate(R.layout.item_layout_b, parent, false);
return new ViewHolderB(view);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
Object data = dataList.get(position);
if (holder instanceof ViewHolderA) {
ViewHolderA viewHolderA = (ViewHolderA) holder;
viewHolderA.textView.setText((String) data);
} else {
ViewHolderB viewHolderB = (ViewHolderB) holder;
viewHolderB.imageView.setImageResource((int) data);
}
}
@Override
public int getItemCount() {
return dataList.size();
}
@Override
public int getItemViewType(int position) {
Object data = dataList.get(position);
if (data instanceof String) {
return 0;
} else {
return 1;
}
}
}
在Activity中使用RecyclerView和Adapter,并在重新加载数据时调用Adapter的notifyDataSetChanged()
方法刷新列表:
MainActivity.java:
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private MyAdapter adapter;
private List dataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化数据
dataList = new ArrayList<>();
dataList.add("Text 1");
dataList.add("Text 2");
dataList.add(R.drawable.image1);
dataList.add(R.drawable.image2);
// 初始化RecyclerView和Adapter
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyAdapter(dataList);
recyclerView.setAdapter(adapter);
// 模拟重新加载数据
reloadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 清空数据源
dataList.clear();
// 添加新的数据
dataList.add("New Text 1");
dataList.add(R.drawable.new_image1);
// 刷新列表
adapter.notifyDataSetChanged();
}
});
}
}
以上代码示例中,通过继承RecyclerView.Adapter类,根据不同的数据类型返回不同的ViewHolder,并在onBindViewHolder()
方法中根据数据类型设置不同的数据源来展示不同的布局。在重新加载数据时,通过调用Adapter的notifyDataSetChanged()
方法来刷新列表。
希望以上示例对你有帮助!
相关内容
不能访问光猫的的管理页面
光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
安卓 - 谷歌地图卡住了
问题描述:在安卓设备上使用谷歌地图应用时,地图卡住了,无法进行任何操作。解决方法一:清除应用缓存和数...