带有自定义项目的Android ListView,其中一个字段是另一个自定义项目列表(非列表视图需要不可滚动)。
在Android开发中,如果我们需要在ListView中显示自定义项目,并且其中一个字段需要显示另一个自定义项目列表,我们可以通过自定义适配器来实现。
首先,我们需要创建两个自定义项目的布局文件。一个用于显示ListView的每个项目,另一个用于显示列表中的另一个自定义项目。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- 其他字段 -->
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="字段1" />
<!-- 显示另一个自定义项目列表的容器 -->
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- 其他字段 -->
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="字段2" />
<!-- 其他字段 -->
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="字段3" />
</LinearLayout>
public class CustomAdapter extends BaseAdapter {
private List<Item> itemList;
private LayoutInflater inflater;
public CustomAdapter(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 View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item, parent, false);
holder = new ViewHolder();
holder.textView1 = convertView.findViewById(R.id.textView1);
holder.container = convertView.findViewById(R.id.container);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Item item = itemList.get(position);
holder.textView1.setText(item.getField1());
// 清空容器中的子视图
holder.container.removeAllViews();
// 添加另一个自定义项目列表的子视图
for (SubItem subItem : item.getSubItemList()) {
View subItemView = inflater.inflate(R.layout.sub_item, holder.container, false);
TextView textView2 = subItemView.findViewById(R.id.textView2);
TextView textView3 = subItemView.findViewById(R.id.textView3);
textView2.setText(subItem.getField2());
textView3.setText(subItem.getField3());
holder.container.addView(subItemView);
}
return convertView;
}
private static class ViewHolder {
TextView textView1;
LinearLayout container;
}
}
public class MainActivity extends AppCompatActivity {
private ListView listView;
private CustomAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
// 创建自定义项目列表数据
List<Item> itemList = new ArrayList<>();
itemList.add(new Item("项目1", Arrays.asList(
new SubItem("子项目1", "字段A"),
new SubItem("子项目2", "字段B")
)));
itemList.add(new Item("项目2", Arrays.asList(
new SubItem("子项目3", "字段C"),
new SubItem("子项目4", "字段D"),
new SubItem("子项目5", "字段E")
)));
// 创建自定义适配器
adapter = new CustomAdapter(this, itemList);
// 设置适配器
listView.setAdapter(adapter);
}
}
这样,我们就实现了一个带有自定义项目的Android ListView,其中一个字段是另一个自定义项目列表。通过自定义适配器,我们可以在ListView中显示自定义项目,并在其中一个字段中显示另一个自定义项目列表。
请注意,以上示例中的布局文件和适配器仅供参考,您可以根据自己的需求进行修改和优化。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云