-1

パターンを使用せずにカスタム CursorAdapter を Android に実装しましたfrom to。アダプタを広く再利用できるようにするために、アダプタに追加したいと思います。どうすればよいですか?

これは私のアダプターです:

     public class AtomAdapter extends CursorAdapter {

LayoutInflater inflater;
@SuppressWarnings("deprecation")
public AtomAdapter(Context context, Cursor c) {
    super(context, c);
    inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    //will create a new View only when recycling an older View is not possible
    View v= inflater.inflate(R.layout.layout_row, parent,false);
    TextView tv=(TextView)v.findViewById(R.id.txt_title);
    v.setTag(R.id.txt_title,tv);
    TextView tv2=(TextView)v.findViewById(R.id.txt_content);
    v.setTag(R.id.txt_content,tv2);
    return v;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    // bind data to your row
    TextView txt_title=(TextView)view.getTag(R.id.txt_title);
    TextView txt_content=(TextView)view.getTag(R.id.txt_content);
    txt_title.setText(cursor.getString(cursor.getColumnIndex(AtomDB.TITLE)));
    txt_content.setText(cursor.getString(cursor.getColumnIndex(AtomDB.CONTENT)));
}

}
4

1 に答える 1

0

SimpleCursorAdapter のソース コードを読んでいたところ、これら 2 つのメソッドが役立つことがわかりました。最初のメソッドである findColumns は、列名から列インデックスに変換します。

         private void findColumns(String[] from) {
           if (mCursor != null) {
                int i;
                int count = from.length;
                if (mFrom == null || mFrom.length != count) {
                   mFrom = new int[count];
             }
             for (i = 0; i < count; i++) {
                  mFrom[i] = mCursor.getColumnIndexOrThrow(from[i]);
             }
          } 
          else {
        mFrom = null;
    }
}

setViewText2 番目のメソッドは bindView メソッドで、やなどのさらに具体的なメソッドを呼び出すことができますsetViewImage

      @Override
      public void bindView(View view,Context context,Cursor cursor)
      {
         final int[] from=mFrom;
         final int[] to=mTo;
         for(int i=0;i<mTo.length;i++)
         {
           String text=cursor.getString(from[i]);
           if(text==null)
             text="No text found"; 
           if(view instanceof TextView)
            setViewText((TextView)v,text);
          else if(view instanceof ImageView)
            setViewImage((ImageView)v,text);
          else
           throw new IllegalStateException(v.getClass().getName()+" is not a View that can be bound by SimpleCursorAdapter");  
       }     
 }

メソッド setImageUri はメイン UI スレッドで実行されるため、レイテンシが発生する可能性があります。

于 2013-10-28T06:39:09.547 に答える