0
所以我在應用ListView項目上的刪除線時從List對象中填充它時出現這個大問題。如何在填充ListView時刪除ListView項目ListView
private void setListItems() {
DatabaseHandler db = new DatabaseHandler(this);
List<ToDoTask> taskList = db.getAllTasks();
for (ToDoTask tt : taskList) {
this.listAdapter.add(tt.getName());
}
this.listAdapter.notifyDataSetChanged();
}
這部分代碼會填充我的ListView。現在我想,如果
tt.getActive() == 0
以刪除線,添加到項目,我不知道我可以從我的ListView得到一個TextView項目。我試圖在我的for循環:
TextView textView = (TextView) this.listView.getChildAt(this.listView.getCount() -1);
但應用程序崩潰。 那沒有崩潰我的應用程序的唯一解決辦法是:
TextView textView = this.listAdapter.getView(this.listView.getCount() -1, null, null)
,但它實際上並沒有改變在ListView什麼。我認爲這不是引用對象本身。 下面是一些代碼實例化我的變量:
this.listView = (ListView) findViewById(R.id.listViewItem);
this.listItems = new ArrayList<String>();
this.listAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, this.listItems);
this.listView.setAdapter(this.listAdapter);
@ user3170934:而且,對於刪除線部分,您需要使用'StrikethroughSpan'來纏繞。 – CommonsWare
@Collin FLynn: 如果我理解正確,我需要輸入TextView tv = this.listAdapter.getView(this.listView.getCount() - 1,null,this.listView)''來獲取TextView元素。是的,這給了我一個TextView對象,但是當我在這個傢伙上設置標誌時,它不會影響listView和listAdapter。我應該告訴listAdapter以某種方式更新給定位置的視圖嗎? – user3170934
@ user3170934是的,您應該告訴適配器更新視圖。一種方法是使用'ViewHolder'模式來獲得優勢。讓適配器在每個'ViewHolder'內爲每行存儲位置int。在你的適配器中寫一個方法,將一行(無論你的行是什麼 - 一些視圖)作爲參數。從行中抓取視圖持有者並檢查int位置以查看它在數據集中的哪個項目。您應該將該狀態作爲適配器內部數據集的一部分,並在'getView'方法內檢查被要求傳遞的視圖的狀態,然後構造它。 –