2017-04-24 230 views
0

我需要我的應用程序根據每個項目的內容是否標記爲已選中或未在我的SQLite中對每個項目的內容應用罷工數據庫。現在,我從數據庫表中獲取列表視圖中每個項目的文本,將其存儲在List中,並將其傳遞到ArrayAdapter中,然後使用它來設置我的ListView適配器。這是我的代碼:迭代ListView中的每個項目 - Android

private ListView taskList = (ListView) view.findViewById(R.id.task_list); 

// Get text for each TextView from database 
db.getWritableDatabase(); 
tasks = db.readTasks((int) listId); 

// Set up adapter for ListView 
adapter = new ArrayAdapter<String>(
      view.getContext(), 
      android.R.layout.simple_expandable_list_item_1, 
      tasks); 
taskList.setAdapter(adapter); 

我的想法是,通過在ListView每個項目迭代它已經被設置後檢​​查,看看是否在數據庫中的相應記錄有它標誌着作爲託運或沒有,然後採取行動因此在項目上。我不知道如何迭代ListView的內容,但是我也不確定這是做這件事的最好方法。有誰知道如何迭代ListView的內容,還是有更好的方法來做到這一點?

+0

也許你的問題和這個相似? http://stackoverflow.com/questions/27722794/strike-through-textview-item-in-listview-by-checking-database-status?rq=1 – dezull

回答

0

首先定義一個任務對象,具有有用的屬性:

class Task { 
    public boolean isComplete() {...}; 
    @override String toString() {...}; 
} 

然後,讓你的數據庫的方法返回這些對象的列表:

ArrayList<Task> tasks = db.readTasks((int) listId); 

最後,繼承一個ArrayAdapter:

private static class TaskAdapter extends ArrayAdapter<Task> { 
    private ArrayList<Task> mTasks; 
    TaskAdapter (Context c, ArrayList<Task> list) { 
     super(c, android.R.layout.simple_spinner_item, list); 
     mTasks = list; 
    } 

    @Override 
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
     View v = super.getView(position, convertView, parent); 
     TextView txt = v.findViewById(android.R.id.text1); 
     int flags = txt.getPaintFlags(); 
     if (mList.get(position).isComplete()) { 
      flags = flags | Paint.STRIKE_THRU_TEXT_FLAG; 
     } else { 
      flags = flags & ~Paint.STRIKE_THRU_TEXT_FLAG; 
     } 
     txt.setPaintFlags(flags); 
    } 
} 

當您對適配器進行子類化時,您還可以做更多事情:例如,創建你自己的視圖佈局(例如,如果你想要一個'剔'圖形,而不是一個strikethough)。

谷歌這種事情的例子。有許多。

相關問題