2011-06-24 3 views
2

私はデータベースから値を取り出し、定義されたビューに表示するカスタムカーソルアダプタを作成しました。Androidカスタムカーソルアダプタ

私は1つのtextviewとimageviewを持っています。 データベースイメージのテキストに応じてそれに応じて変更されます。 MyArrayAdapterを次のように定義しましたが、エラーが発生します。

public class MyArrayAdapter extends SimpleCursorAdapter { 

    private final Context context; 
    private final Cursor cursor; 
    private final String[] from; 
    static class ViewHolder { 
     public ImageView imageView; 
     public TextView textView; 
    } 

    public MyArrayAdapter(Context context, int layout, Cursor c, String[] from, 
      int[] to) { 
     super(context, layout, c, from, to); 
     this.context = context; 
     this.cursor = c; 
     this.from = from; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View rowView = convertView; 
     ViewHolder holder; 
     if (rowView == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      rowView = inflater.inflate(R.layout.todo_row,null,true); 
      holder = new ViewHolder(); 
      holder.textView = (TextView) rowView.findViewById(R.id.todo_edit_summary); 
      holder.imageView = (ImageView) rowView.findViewById(R.id.icon); 
      rowView.setTag(holder); 
     }else{ 
      holder = (ViewHolder) rowView.getTag(); 
     } 

     String s = cursor.getString(cursor.getColumnIndex(from[0])); 
     holder.textView.setText(s); 

     if (cursor.getString(cursor.getColumnIndex("category")) == "Urgent"){ 
      holder.imageView.setImageResource(R.drawable.urgent); 
     }else{ 
      holder.imageView.setImageResource(R.drawable.reminder); 
     } 

     return rowView; 
    } 
} 

(削除答えから更新)

次のコードが正常に動作しているが、彼らはそれぞれに同じ値とリストビュー内のすべてのエントリを示しています。私はSimpleCursorAdapterを延長しました。カーソルを管理するのに間違いはありますか?

public View getView(int position, View convertView, ViewGroup parent) { 
     View rowView = convertView; 
     ViewHolder holder; 
     if (rowView == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      rowView = inflater.inflate(R.layout.todo_row,null,true); 
      holder = new ViewHolder(); 
      holder.textView = (TextView) rowView.findViewById(R.id.label); 
      holder.imageView = (ImageView) rowView.findViewById(R.id.icon); 
      rowView.setTag(holder); 
     }else{ 
      holder = (ViewHolder) rowView.getTag(); 
     } 

     String s = cursor.getString(cursor.getColumnIndex(from[0])); 
     holder.textView.setText(s); 

     if ((cursor.getString(cursor.getColumnIndex("category"))).equals("Urgent")){ 
      holder.imageView.setImageResource(R.drawable.reminder); 
     }else{ 
      holder.imageView.setImageResource(R.drawable.urgent); 
     } 

     return rowView; 
    } 
+1

あなたは誰かが正確に何をすると思いますか?少なくともここではエラーが何であるか教えてください。 –

答えて

0

2つの文字列の値を比較するには、equals()のStringクラスを使用します。この場合、==演算子

したがって、次のコード

if ((cursor.getString(cursor.getColumnIndex("category"))).equals("Urgent")){ 
     holder.imageView.setImageResource(R.drawable.urgent); 
    }else{ 
     holder.imageView.setImageResource(R.drawable.reminder); 
    } 
+1

また、「Urgent」.equals(cursor.getColumnIndex( "category")))は、「緊急」がnullでないことを知っているので安全です。 – cyngus

5

は、私の知る限りは、使用しているSimpleCursorAdapterの一部のみを使用して、簡単にリテラルで代用できるパラメータからです言うことができるように使用を使用DONOTあなたがそれを拡張しているからです。私はコードの "勇気"に慣れていませんが、getViewはSimpleCursorAdapterドキュメンテーションには記載されていないので、あなたの例のように軽く上書きすることはできないので、

あなたが持っているものに基づいて、代わりにCursorAdapterを拡張し、getViewにあったコードをnewViewとbindViewに分割します。どちらもCursorAdapterの抽象メソッドとして定義されています。

public class MyCursorAdapter extends CursorAdapter { 

    static class ViewHolder { 
     public ImageView imageView; 
     public TextView textView; 
    } 

    public MyArrayAdapter(Context context, Cursor c) { 
     super(context, c); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = inflater.inflate(R.layout.todo_row,null,true); 

     ViewHolder holder = new ViewHolder(); 
     holder.textView = (TextView) rowView.findViewById(R.id.todo_edit_summary); 
     holder.imageView = (ImageView) rowView.findViewById(R.id.icon); 
     rowView.setTag(holder); 

     return rowView; 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     ViewHolder holder = (ViewHolder) view.getTag(); 

     String s = cursor.getString(cursor.getColumnIndex("whatever from[] represented")); 
     holder.textView.setText(s); 

     if (cursor.getString(cursor.getColumnIndex("category")) == "Urgent"){ 
      holder.imageView.setImageResource(R.drawable.urgent); 
     }else{ 
      holder.imageView.setImageResource(R.drawable.reminder); 
     }  
    } 
} 
関連する問題