我正在使用带有查看模式的BaseAdapter
。如何隐藏列表项?
而且我想隐藏从Listview
设置一定的项目:
convertView.setVisibility(View.GONE);
什么都不做。
我正在使用带有查看模式的BaseAdapter
。如何隐藏列表项?
而且我想隐藏从Listview
设置一定的项目:
convertView.setVisibility(View.GONE);
什么都不做。
从适配器列表中删除它的项目并重新加载adaper,如果需要再次显示该项目,则考虑使用另一个列表。
这Answer做你需要操纵名单,它排序,你能适应它删除项目
编辑
要实现撤消,则可能需要保存原始值列表,栈举行删除的项目指标和另一个列表,从原来的列表removed_indices生成,这将在适配器中使用
这也是我的想法,删除项目,然后添加它们。 但它看起来很丑,因为我想要项目在列表(位置)的特定位置。 – user1940676
该解决方案重新加载列表,这是它的唯一效果,但你似乎不太舒服 –
以及我将删除项目,呼吁notifydatasethanged,并在需要时再次添加它们。 – user1940676
试试这个:
listitem.setVisibility(View.INVISIBLE);
或
listitem.setVisibility(View.GONE);
你知道'View.INVISIBLE'和'View.GONE'之间的区别吗? – Selvin
他也可以写View.GONE我知道。但我的意思是他应该把这个列表项目设置为不可见,而不是视图。 –
当视图不可见时,视图中将出现'占位符'。 – user1940676
下面的例子:
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;
}
}
);
好像他已经这样做了(我们可以假设这个问题......你读过了吗?)...所以这不是一个答案 – Selvin
可以存储在另一个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();
你能不能从您的适配器后整个'getView()'方法? –
@AndrewSchuster是一个直接执行的http://developer.android.com/training/improving-layouts/smooth-scrolling.html ,它的工作 – user1940676
'View listItem = convertView; View v; while(!(v = (View)listItem.getParent())。equals(parent)){listItem = v; } listItem.setVisibility(View.GONE);'放我不确定convertView是否具有getView中的父级;/...它会发生,因为您在getView中创建的项目不能直接添加到ListView- ViewGroup ... ListView实现可以在添加到自己之前在其他视图中打包您的视图 – Selvin