我正在使用BaseAdapter
视图持有者模式。
我想隐藏Listview
设置中的某些项目:
convertView.setVisibility(View.GONE);
什么也没做。
答案 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();