如何将额外的列表项添加到列表视图?

时间:2016-09-30 15:58:42

标签: android listview

我需要我的listview始终有一个与其他列表项不同的尾随列表项,即使适配器为空。

我尝试在适配器构造函数的数据集末尾添加一个空项:

SELECT
    i.trx_line_id AS invoice_line_id, -- Aliased
    i.datasource AS invoice_datasource, -- Aliased
    ie.category_type,
    ss.trx_line_id AS sales_structure_line_id, -- Aliased
    ss.datasource AS sales_structure_datasource, -- Aliased
    pl.pl_cd
FROM
    invoice i
LEFT JOIN
    sales_structure ss ON i.trx_line_id = ss.trx_line_id
LEFT JOIN
    invoice_ext ie ON i.trx_line_id = ie.trx_line_id
LEFT JOIN
    product_level pl ON i.pl_cd = pl.pl_cd
WHERE
    ss.sales_team_rpt IN ('a','b');

在getView方法中,我区分了最后一项和其他项,并相应地膨胀了不同的布局。

当用户添加新的列表项时,我需要删除数据集中的空项,将新数据添加到数据集的末尾,然后在数据集的最后一个索引中添加另一个空项:

mDataset.add(null);

这当然是在适配器中调用的。当我运行应用程序时,我收到以下错误:

public void addData(String data) {
    mDataset.remove(mDataset.indexOf(null));
    mDataset.add(data);
    mDataset.add(null);
    notifyDataSetChanged();
}

哪个映射到我的适配器的getView()方法中的这一行:

java.lang.NullPointerException: Attempt to read from field 'android.widget.TextView com.neutronstar.revu.DataAdapter$DataViewHolder.mDataTextView' on a null object reference

这是适配器中的getView()方法:

holder.mDataTextView.setText(mDataset.get(position));

如何解决此错误?

由于

2 个答案:

答案 0 :(得分:0)

您可以在XML中指向一个ImageView,列表视图为空,并使其可见。在适配器类中检查数据集是否为空,使Imageview Visibility.visible和Listview的可见性更改为visibility.gone。

示例简短示例

XML

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
<ListView 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/listView"/>
<ImageView 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/imageview"
    android:visibility="gone"/>
</LinearLayout>

适配器

public class Adapter extends SomeAdapter{

//{
//constructor...
//overriden methods
//whatever you want...
//}

//place where you check if your dasaet is empty

if(dataset.length=0){
 listview.setVisibility(View.GONE);
 imageView.setVisibility(View.VISIBLE);
}
}

答案 1 :(得分:0)

正如@Rotwang所说。停止添加null项并将footer视图附加到listview,如下面的activity / fragment。

View v = getLayoutInflater().inflate(R.layout.footer, null);
listView.addFooterView(v); //IMPORTANT: make sure you call this before setAdapter
listView.setAdapter(adapter);

并且不要忘记创建页脚布局。