在Android的ListView中显示两种不同的视图可以通过自定义适配器来实现。以下是一种常见的实现方式:
getViewTypeCount()
:返回视图类型的数量,这里是2。getItemViewType(int position)
:返回指定位置的数据项所对应的视图类型,根据需要返回0或1。getView(int position, View convertView, ViewGroup parent)
:根据视图类型返回不同的视图。getView()
方法中,根据视图类型使用不同的布局文件或视图对象来创建视图。convertView
为空或类型不匹配,可以使用LayoutInflater
来创建新的视图。if-else
语句或switch
语句来选择不同的布局文件或视图对象。convertView.findViewById()
来获取布局文件或视图对象中的各个控件,并设置它们的属性和数据。下面是一个示例代码:
public class MyAdapter extends BaseAdapter {
private static final int VIEW_TYPE_1 = 0;
private static final int VIEW_TYPE_2 = 1;
private List<Item> itemList;
private LayoutInflater inflater;
public MyAdapter(Context context, List<Item> itemList) {
this.itemList = itemList;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return itemList.size();
}
@Override
public Object getItem(int position) {
return itemList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
Item item = itemList.get(position);
if (item.getType() == 1) {
return VIEW_TYPE_1;
} else {
return VIEW_TYPE_2;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int viewType = getItemViewType(position);
if (convertView == null || convertView.getTag() != viewType) {
if (viewType == VIEW_TYPE_1) {
convertView = inflater.inflate(R.layout.item_type_1, parent, false);
convertView.setTag(VIEW_TYPE_1);
} else {
convertView = inflater.inflate(R.layout.item_type_2, parent, false);
convertView.setTag(VIEW_TYPE_2);
}
}
// 获取布局文件或视图对象中的控件
TextView textView = convertView.findViewById(R.id.text_view);
ImageView imageView = convertView.findViewById(R.id.image_view);
// 设置控件属性和数据
Item item = itemList.get(position);
textView.setText(item.getText());
imageView.setImageResource(item.getImageResId());
return convertView;
}
}
在上述代码中,假设有两种不同的Item类型,分别对应item_type_1.xml
和item_type_2.xml
两个布局文件。根据Item的类型,在getView()
方法中选择不同的布局文件,并设置对应的数据。
使用示例:
List<Item> itemList = new ArrayList<>();
// 添加Item数据
// ...
MyAdapter adapter = new MyAdapter(context, itemList);
ListView listView = findViewById(R.id.list_view);
listView.setAdapter(adapter);
以上代码中,item_type_1.xml
和item_type_2.xml
是自定义的布局文件,可以根据实际需求进行设计。在Activity中,创建自定义适配器的实例,并将其设置给ListView,即可实现在ListView中显示两种不同的视图。
云+社区沙龙online第5期[架构演进]
云+社区沙龙online第5期[架构演进]
云原生正发声
算法大赛
DBTalk
云+社区技术沙龙[第1期]
DBTalk技术分享会
领取专属 10元无门槛券
手把手带您无忧上云