我有一个特殊的问题,我没有找到答案。我无法解决这个问题。
那么......有没有办法在ListView
上动态隐藏或显示项目(图像)?
我的意思是,点击工具栏菜单项"编辑"后,文本旁边的ListView
上应显示图片。当用户单击此图像时,应从ListView
和数据库中删除此文本。并且,在点击" Done"之后,之前出现的图像应该消失。
我为此花了一整夜,我找不到答案,所以请各位帮助我!
我有这个:
点击编辑后想要这个:
我的适配器的一部分(从BaseAdapter扩展)
public View getView(final int position, View convertView, final ViewGroup parent) {
if(convertView == null){
convertView = inflater.inflate(R.layout.list, null);
TextView textView = (TextView) convertView.findViewById(R.id.textView);
textView.setText(todo.get(position));
ImageView circleImage = (ImageView) convertView.findViewById(R.id.circleImage);
Picasso.with(mActivity).load(R.drawable.circle_image).transform(new CircleTransform()).into(circleImage);
}
if(editMode){
circleImage.setVisibility(View.GONE);
} else circleImage.setVisibility(View.VISIBLE);
return convertView;
}
public void setMode(boolean editMode){
this.editMode=editMode;
notifyDataSetChanged();
}
来自MainActivity的onOptionItemSelected:
else if(id == R.id.edit){
mToDoFragment = new ToDOFragment();
mFToDoFragment.setEditable(true);
invalidateOptionsMenu();
return true;
}
最后一部分来自ToDoFragment:
public void setEditable(boolean editable){
mFavouritesListAdapter.setMode(editable);
}
在那之后,我得到了如此美妙的NullPointerException:(
java.lang.NullPointerException: Attempt to invoke virtual method 'void adapters.ToDoListAdapter.setMode(boolean)' on a null object reference
答案 0 :(得分:2)
嗨,请按照吹气步骤。我希望它会对你有所帮助。
首先,您有一个标志,指示当前模式,例如编辑模式或正常模式(查看模式)下的列表视图
定义模式后。将数组列表与您的模型或对象一起使用。用BaseAdapter
绑定数组列表。我想你正在使用ListView
。如果您使用的是RecyclerView
,则流程或逻辑将保持不变。
在getView(....)
内。使用LayoutInflater
定义布局
检查后,convert-view不为null并使布局膨胀。
将逻辑用于检查模式的标志。
检查模式是编辑模式还是普通视图模式。如果编辑,则显示每个行项目的[x]图标,否则隐藏/删除图像视图。
如果在单击[x]图像视图时编辑模式,请从与BaseAdapter
绑定的数据集中删除模型或对象的位置。并致电notifyDatasetChanged()
。这将刷新列表视图并从列表视图中删除该项目。
如果编辑模式已完成,用户点击"完成"菜单项中的选项。然后只需将模式标志从编辑更改为完成模式。再次调用notifyDatasetChanged()
BaseAdapter
方法
醇>
那就是它。如果您有任何疑问,请告诉我。