2013-10-31 86 views
0

我正在使用带有查看模式的BaseAdapter如何隐藏列表项?

而且我想隐藏从Listview设置一定的项目:

convertView.setVisibility(View.GONE);

什么都不做。

+0

你能不能从您的适配器后整个'getView()'方法? –

+0

@AndrewSchuster是一个直接执行的http://developer.android.com/training/improving-layouts/smooth-scrolling.html ,它的工作 – user1940676

+0

'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

回答

2

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

Answer做你需要操纵名单,它排序,你能适应它删除项目

编辑

要实现撤消,则可能需要保存原始值列表,栈举行删除的项目指标和另一个列表,从原来的列表removed_indices生成,这将在适配器中使用

+0

这也是我的想法,删除项目,然后添加它们。 但它看起来很丑,因为我想要项目在列表(位置)的特定位置。 – user1940676

+0

该解决方案重新加载列表,这是它的唯一效果,但你似乎不太舒服 –

+0

以及我将删除项目,呼吁notifydatasethanged,并在需要时再次添加它们。 – user1940676

0

试试这个:

listitem.setVisibility(View.INVISIBLE); 

listitem.setVisibility(View.GONE); 
+1

你知道'View.INVISIBLE'和'View.GONE'之间的区别吗? – Selvin

+0

他也可以写View.GONE我知道。但我的意思是他应该把这个列表项目设置为不可见,而不是视图。 –

+0

当视图不可见时,视图中将出现'占位符'。 – user1940676

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; 
    } 

} 
); 
+0

好像他已经这样做了(我们可以假设这个问题......你读过了吗?)...所以这不是一个答案 – Selvin

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/