显示/隐藏项目 - 列表视图

Posted

技术标签:

【中文标题】显示/隐藏项目 - 列表视图【英文标题】:Showing/hiding items - listview 【发布时间】:2015-12-24 18:40:54 【问题描述】:

我有一个特殊的问题,我还没有找到答案。我无法处理这个问题。 那么...有没有办法在ListView 上动态隐藏或显示项目(图像)?

我的意思是,在点击名为“编辑”的工具栏菜单项后,在文本旁边的 ListView 上应该会出现图像。当用户单击此图像时,应从ListView 和数据库中删除此文本。而且,在点击“完成”后,之前出现的图像应该会消失。

我为此花了一整夜,我还没有找到答案,所以请大家帮帮我!

我有这个:

点击编辑后想要这个:

这是我的适配器的一部分(从 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

【问题讨论】:

是的,我可以帮助您,但请告诉我您的开发成果。给我看一些东西。 我的意思是这是可能的。只需管理原始数据集,编辑和删除选项应应用于数据集。数据集与您的列表绑定,并在需要时适当地调用通知数据集。 @BhavdipPathar 添加了两张照片 :) 当你点击正确的 [x] 图标时,你想从列表视图中删除该项目。 没错,我知道该怎么做。我不知道在用户按下编辑按钮后如何设置这些圈子的可见性。 【参考方案1】:

您好,请按照打击步骤进行操作。希望对你有帮助。

    首先,您有一个标志,表明当前模式,例如在编辑模式或正常模式(视图模式)的列表视图

    定义模式后。使用您的模型或对象获取数组列表。用BaseAdapter 绑定你的数组列表。我猜你正在使用ListView。如果您使用的是RecyclerView,那么流程或逻辑将保持不变。

    getView(....) 里面。使用LayoutInflater 定义您的布局 检查转换视图不为空并膨胀布局后。 放置检查模式标志的逻辑。

    检查模式是编辑模式还是普通视图模式。如果编辑,则显示每个行项目的 [x] 图标,否则隐藏/消失图像视图。

    如果单击 [x] 图像视图时模式为编辑,则从与 BaseAdapter 绑定的数据集中删除模型或对象的位置。并致电notifyDatasetChanged()。这将刷新列表视图并从列表视图中删除该项目。

    如果编辑模式完成并且用户单击菜单项中的“完成”选项。然后只需将模式标志从编辑模式更改为完成模式。再次调用 BaseAdapternotifyDatasetChanged() 方法

就是这样。如果您有任何疑问,请告诉我。

【讨论】:

以上是关于显示/隐藏项目 - 列表视图的主要内容,如果未能解决你的问题,请参考以下文章

Rails 视图表以显示来自另一个模型的值

访问使用列表框中选择的项目更新子表单

隐藏列表视图中的项目

无法将查询另存为视图表

SQL 如何查询指定架构中所有表(或视图)的名称

3.复杂查询