[英]How to add an extra list item to list view?
即使适配器为空,我也需要listview始终具有与其他列表项不同的结尾列表项。
我尝试在适配器构造函数的数据集末尾添加一个空项目:
mDataset.add(null);
在getView方法中,我区分了最后一个项目和其他项目,并相应地增加了不同的布局。
当用户添加新列表项时,我需要删除数据集中的空项目,将新数据添加到数据集的末尾,然后在数据集的最后一个索引中添加另一个空项目:
public void addData(String data) {
mDataset.remove(mDataset.indexOf(null));
mDataset.add(data);
mDataset.add(null);
notifyDataSetChanged();
}
当然,这在适配器内称为。 当我运行该应用程序时,出现以下错误:
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));
这是适配器中的getView()方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
long viewType = getItemId(position);
Log.i("SPECS ADAPTER", viewType + "");
if (getCount() == 0)
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_add_spec, null);
else if (viewType == NOT_LAST_ITEM) {
SpecViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_spec, null);
holder = new SpecViewHolder(convertView);
convertView.setTag(holder);
} else
holder = (SpecViewHolder) convertView.getTag();
holder.mSpecTextView.setText(mSpecs.get(position));
} else {
if (convertView == null)
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_add_spec, null);
}
return convertView;
}
public void addSpec(String spec) {
mSpecs.remove(mSpecs.indexOf(null));
mSpecs.add(spec);
mSpecs.add(null);
notifyDataSetChanged();
}
static class SpecViewHolder {
@BindView(R.id.spec_text_view) TextView mSpecTextView;
SpecViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
如何解决此错误?
谢谢
您可以在XML中有一个ImageView,指向该listview为空,使其可见性消失。 在适配器类中,检查数据集是否为空,将Imageview Visibility.visible更改为Listview的可见性,并将其更改为visible.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);
}
}
正如@Rotwang所说。 停止添加空项目,并在活动/片段中将页脚视图附加到列表视图,如下所示。
View v = getLayoutInflater().inflate(R.layout.footer, null);
listView.addFooterView(v); //IMPORTANT: make sure you call this before setAdapter
listView.setAdapter(adapter);
并且不要忘记创建页脚布局。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.