2013-10-31 84 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/