2013-08-17 101 views
1

我有一個列表視圖來顯示詳細數據。我將數據存儲在字符串的ArrayList中。但是,某些字段可能沒有任何數據要顯示,但我需要保持數組長度相同以匹配靜態標題數組。我就能夠在我的getView方法中的空數據我的自定義基本適配器的位置:Android刪除自定義陣列適配器中的listview行

 public View getView(int position, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.drug_detail_cell, parent, false); 
     } 

     // check array bounds 
     if (position < getCount()) { 

      // check for null items 
      String item = items.get(position); 
      if (item != null) { 

       // get the text views 
       TextView title = (TextView) convertView.findViewById(R.id.item_title); 
       TextView sub = (TextView) convertView.findViewById(R.id.item_subtitle); 

       title.setText(titles.get(position)); 
       sub.setText(item.toString());     
      } else { 
       // delete row 
      } 
     } 

     return convertView; 
    } 

我的問題是,雖然數據不顯示,我還是在我的列表視圖的空行。我的問題是如何刪除該行?任何幫助將不勝感激。先謝謝了。

+0

刪除你的適配器上填充你的listview調用'notifyDatasetChanged'的數據來刷新或更新列表視圖 – Raghunandan

+0

查找textViews id如果條件沒有超出它,當你膨脹的視圖。 – Piyush

回答

1

我有一個小竅門:在else子句返回一個空視圖

else{ 
    View v = new View(context); 
    v.setLayoutParams(new AbsListView.LayoutParams(0, 0)); 
    return v; 
} 

但是如果你的列表有護欄,空視圖下方的分隔一倍。

另一種:我認爲你應該在getView調用之前處理所有的空數據。我的意思是: - 在getCount(){ 循環並從位置創建新映射,而不是空數據
循環並計數所有數據!= null;返回計數; }

在getView函數中使用新的地圖。

希望得到這個幫助。

+0

感謝您的回覆。我把你的建議發送給陣列適配器之前處理空數據。由於我的數據集很小,我創建了一個循環來從我的列表和關聯的頭中刪除空數據。 – wyoskibum

2

對於從CustomListAdapter移除一行:

從指定索引一個ArrayAdapter刪除的項目,該呼叫notifyDatasetChanged後。它會更新你的listView。

CustomAdapterClass

@Override 
public void remove(String object) { 
    super.remove(object); 

     // your other code 
} 

ListActivity類:

CustomAdapterClass adap = new CustomAdapterClass(); 

adap.remove("hello world"); 

adap.notifyDatasetChanged(); // this will update your listView 

我的代碼是一個bare bone example描繪如何實現自己的目標。

相關問題