2017-04-24 7 views
0

私のアプリケーションでは、各アイテムのコンテンツがチェックされているかどうかに基づいてリストビュー内の各アイテムの内容にストライクを適用する必要がありますデータベース。今は、リストビューの各項目のテキストをデータベーステーブルから取得し、リストに格納し、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の内容を反復処理する方法を知っていますか、これを行うためのより良い方法がありますか?あなたのデシベルの方法は、そのようなオブジェクトのリストを返すよう次に

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

+0

多分あなたの質問はこれに似ていますか? http://stackoverflow.com/questions/27722794/strike-through-textview-item-in-listview-by-checking-database-status?rq=1 – dezull

答えて

0

まず有用な性質を持つTaskオブジェクトを定義

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

アダプターをサブクラス化すると、さらに多くのことを行うことができます。独自のビューレイアウトを作成します(たとえば、ストライクテックの代わりに「ダニ」グラフィックを使用する場合)。

Googleのこの種の例については、沢山あります。

関連する問題