0

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

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

convertView.setVisibility(View.GONE);

什么也没做。

4

4 回答 4

2

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

这个答案做你需要的操作列表,它排序,你可以调整它以删除项目

编辑

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

于 2013-10-31T13:36:12.463 回答
0

试试这个:

listitem.setVisibility(View.INVISIBLE);

或者

listitem.setVisibility(View.GONE);
于 2013-10-31T13:38:58.490 回答
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;
    }

}
);
于 2013-10-31T13:42:49.993 回答
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();
    }
}

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

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

于 2015-01-07T11:33:02.990 回答