Showing/hiding 项 - 列表视图
Showing/hiding items - listview
我有一个特殊问题,我还没有找到答案。我无法处理这个问题。
那么...有什么方法可以在 ListView
上动态隐藏或显示项目(图像)?
我的意思是,在点击名为 "Edit" 的工具栏菜单项后,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 中选择的 onOptionItem:
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
您好,请按照吹气步骤进行。希望对你有所帮助。
首先你有标志表明当前模式,例如列表视图处于编辑模式或正常模式(查看模式)
定义模式后。将数组列表与您的模型或对象一起使用。用 BaseAdapter
绑定你的数组列表。我猜你正在使用 ListView
。如果您使用的是 RecyclerView
,那么流程或逻辑将保持不变。
在getView(....)
里面。使用 LayoutInflater
定义布局
检查 convert-view 不为 null 并膨胀布局后。
放置检查模式标志的逻辑。
检查模式是编辑模式还是普通查看模式。如果编辑则显示每个行项目的 [x] 图标,否则 hide/gone 图像视图。
如果单击 [x] 图像视图时模式为编辑,则从与 BaseAdapter
绑定的数据集中删除模型或对象的位置。并调用notifyDatasetChanged()
。这将刷新列表视图并从列表视图中删除项目。
如果编辑模式完成并且用户单击菜单项中的 "Done" 选项。然后简单地将模式标志从编辑模式更改为完成模式。再次调用 BaseAdapter
的 notifyDatasetChanged()
方法
就是这样。如果您有任何疑问,请告诉我。
我有一个特殊问题,我还没有找到答案。我无法处理这个问题。
那么...有什么方法可以在 ListView
上动态隐藏或显示项目(图像)?
我的意思是,在点击名为 "Edit" 的工具栏菜单项后,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 中选择的 onOptionItem:
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
您好,请按照吹气步骤进行。希望对你有所帮助。
首先你有标志表明当前模式,例如列表视图处于编辑模式或正常模式(查看模式)
定义模式后。将数组列表与您的模型或对象一起使用。用
BaseAdapter
绑定你的数组列表。我猜你正在使用ListView
。如果您使用的是RecyclerView
,那么流程或逻辑将保持不变。在
getView(....)
里面。使用LayoutInflater
定义布局 检查 convert-view 不为 null 并膨胀布局后。 放置检查模式标志的逻辑。检查模式是编辑模式还是普通查看模式。如果编辑则显示每个行项目的 [x] 图标,否则 hide/gone 图像视图。
如果单击 [x] 图像视图时模式为编辑,则从与
BaseAdapter
绑定的数据集中删除模型或对象的位置。并调用notifyDatasetChanged()
。这将刷新列表视图并从列表视图中删除项目。如果编辑模式完成并且用户单击菜单项中的 "Done" 选项。然后简单地将模式标志从编辑模式更改为完成模式。再次调用
BaseAdapter
的
notifyDatasetChanged()
方法
就是这样。如果您有任何疑问,请告诉我。