如何在我的自定义CursorAdapter中实现from-to模式

时间:2013-10-28 05:07:00

标签: android simplecursoradapter android-cursoradapter

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

}

1 个答案:

答案 0 :(得分: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线程上运行,这可能会导致延迟。