显示/隐藏项目 - listview

时间:2015-09-27 11:34:51

标签: android listview visibility

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

我的意思是,点击工具栏菜单项"编辑"后,文本旁边的ListView上应显示图片。当用户单击此图像时,应从ListView和数据库中删除此文本。并且,在点击" Done"之后,之前出现的图像应该消失。

我为此花了一整夜,我找不到答案,所以请各位帮助我!

我有这个:

enter image description here

点击编辑后想要这个:

enter image description here

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

1 个答案:

答案 0 :(得分:2)

嗨,请按照吹气步骤。我希望它会对你有所帮助。

  1. 首先,您有一个标志,指示当前模式,例如编辑模式或正常模式(查看模式)下的列表视图

  2. 定义模式后。将数组列表与您的模型或对象一起使用。用BaseAdapter绑定数组列表。我想你正在使用ListView。如果您使用的是RecyclerView,则流程或逻辑将保持不变。

  3. getView(....)内。使用LayoutInflater定义布局 检查后,convert-view不为null并使布局膨胀。 将逻辑用于检查模式的标志。

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

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

  6. 如果编辑模式已完成,用户点击"完成"菜单项中的选项。然后只需将模式标志从编辑更改为完成模式。再次调用notifyDatasetChanged()

  7. BaseAdapter方法

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