-1

我在 Android 中实现了一个自定义 CursorAdapter 而不使用该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源码,发现这两个方法可能会有些帮助。第一个方法,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;
    }
}

第二种方法是 bindView 方法,您可以在其中调用更具体的方法,例如setViewTextsetViewImage

      @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 回答