如何隐藏列表项?

时间:2013-10-31 13:33:26

标签: android android-listview

我正在使用BaseAdapter视图持有者模式。

我想隐藏Listview设置中的某些项目:

convertView.setVisibility(View.GONE);

什么也没做。

4 个答案:

答案 0 :(得分:2)

从适配器列表中删除其项目并重新加载adaper,如果您需要再次显示该项目,请考虑使用其他列表。

这个Answer执行您需要操作列表,它排序,您可以调整它以删除项目

修改

要实现撤消,您可能需要一个包含原始值的列表,一个用于保存已删除项目索引的堆栈以及另一个从原始list-removed_indices生成并将在您的适配器中使用的列表

答案 1 :(得分:0)

请改为尝试:

listitem.setVisibility(View.INVISIBLE);

listitem.setVisibility(View.GONE);

答案 2 :(得分:0)

这是一个例子:

ListActivity.this.setListAdapter(new SimpleAdapter(MainActivity.this, contactsList,
            R.layout.list_item,
            new String[] { TAG_CONTACT_NAME, TAG_STATUS}, new int[] {
                    R.id.name, R.id.status}){

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

                View v = super.getView(position, convertView, parent);


                TextView statTview = (TextView)v.findViewById(R.id.status);
                            String stat = statTview .getText().toString();

                if (stat.equals("0")){
                    v.findViewById(R.id.status).setVisibility(View.GONE);
                }


        return v;
    }

}
);

答案 3 :(得分:0)

您可以将隐藏位置存储在另一个ArrayList中,并隐藏该项目,如下所示:

public class SampleAdapter extends BaseAdapter {
    Activity activity;
    ArrayList<String> listItems;
    ArrayList<Integer> hiddenPositions = new ArrayList<>();

    public SampleAdapter(Activity activity, ArrayList<String> listItems) {
        this.activity = activtity;
        this.listItems = listItems;
    }

    ...

    @Override
    public View getView(int position, View convertView, ViewGroup arg2) {
        // The following small snippet of code ensures 
        // that we skip data from all the hidden positions 
        // and use the updated position to fetch the 
        // correct data from the listItems ArrayList. 
        for(Integer hiddenIndex : hiddenPositions) {
            if(hiddenIndex <= position) {
                position = position + 1;
            }
        }
        String testString = listItems.get(position);
        ...
    }    

    @Override
    public int getCount() {
        return listItems.size() - hiddenPositions.size();
    }
}

为了能够在列表中显示它,只需从hiddenPositions ArrayList中删除位置并执行notifyDataSetChanged();

在这里解释得更好:http://vshivam.wordpress.com/2015/01/07/hiding-a-list-item-from-an-android-listview-without-removing-it-from-the-data-source/