我想实现一个包含2个不同列表的listView,它使用2个不同的Items并希望使用相同的ListView显示它们。
答案 0 :(得分:0)
为此你必须采用一个类型为Object
List<Object> listItems = new ArrayList<>();
您将两个不同的列表值添加到listItems
上方。
然后将您的适配器与listItems
绑定,然后在BindView()
写下您的项目,如下所示。
if(listItems instanceof firstListItemModel)
// bind item from your first list
else if(listItems instanceof secondListItemModel)
// bind item from your second list
答案 1 :(得分:0)
你应该使用
https://github.com/commonsguy/cwac-merge
为了使用您需要的数据创建和合并不同的适配器。您还应该插入标题视图。
以下是一个例子:
@BindView(R.id.lv_validation_errors)
ListView lvValidationErrors;
private List<Notification> notificationList = new ArrayList<>();
public MergeAdapter mergeAdapter = new MergeAdapter();
public ArrayAdapter errorAdapter;
private ArrayList<String> errorList = new ArrayList<>();
public ArrayAdapter alertAdapter;
private ArrayList<String> alertList = new ArrayList<>();
首先我设置ListView(使用ButterKnife,它执行findViewById的东西)然后
errorAdapter = new ArrayAdapter(this, R.layout.adapter_error, R.id.text1, errorList);
mergeAdapter.addView(header("Erros"), false);
mergeAdapter.addAdapter(errorAdapter);
我创建了我想要混合的适配器,并为节标题添加了视图(不要忘记在列表中设置一个值以防止它为空)然后
alertAdapter = new ArrayAdapter(this, R.layout.adapter_warning, R.id.text1, alertList);
mergeAdapter.addView(header("Advertências"), false);
mergeAdapter.addAdapter(alertAdapter);
与上一步相同,最后:
lvValidationErrors.setAdapter(mergeAdapter);
将合并的适配器设置为ListView。
答案 2 :(得分:0)
我可以理解,你想要一个垂直半划分的屏幕,每个屏幕都包含ListView
而且你说底部ListView
完全基于上ListView
。
底部ListView应根据上ListView
选项加载。
如果是,那么您可以使用权重在布局上显示ListViews
(上部和下部),如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp">
<ListView
android:id="@+id/list_view1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<ListView
android:id="@+id/list_view2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
然后,您可以在list_view2
项目点击:
list_view1
上设置适配器
ListView upperListView=(ListView) findViewById(R.id.list_view1);
ListView bottomListView=(ListView) findViewById(R.id.list_view2);
upperListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
// You can put your logic here to fetch data according to upper ListView item clicked position. I am taking temp. data for now.
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, arrayList//your desired list here);
((ListView) bottomListView.setAdapter(adapter);
}
});
那就是它!!