如何在一个listView中使用2个不同的ITEMS实现2个不同的列表,并在listView之间使用分区分隔符?

时间:2017-09-19 17:21:23

标签: android listview

我想实现一个包含2个不同列表的listView,它使用2个不同的Items并希望使用相同的ListView显示它们。

  1. 两个列表都用分区分隔符
  2. 分隔
  3. 上面的listView在项目
  4. 中有一个自定义选择器imageButton
  5. 下面listView的项目为dateDividers

3 个答案:

答案 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);
                }
            });

那就是它!!