0

我正在尝试使用在视图之间添加分隔符CursorAdapter

我知道如何自己添加分隔符,但我不确定如何获得适合Cursor此类任务的方法。存储在内部的所有数据都CotentProvider以 SQLite 数据库为后盾。

分隔符存储为:_id, name

项目存储为:_id, name, ... , separator_id

到目前为止我看到的解决方案

  1. 获取所有分隔符。对于每个分隔符独立地检索项目。我认为会有很大的开销......还是我错了?
  2. 加入表格item.separator_id = separator._id并按分隔符的某些字段对结果进行排序。然后,在内部CursorAdapter查找更改separator_id并插入分隔符视图。很乱,我想。

有没有更好的方法来解决这个问题?

4

1 回答 1

1

最好使用分隔符枚举。但在你的情况下

public Cursor getItemList(){
     return db.rawQuery("SELECT * FROM Items NATURAL JOIN Separators ON Item.separator_id = Separators._id");
    }

创建您的自定义 CursorAdapter 并以您的方式在 bindView 方法中管理它。带有视图分隔符的布局应包含 ImageView 作为分隔符。

public class MyCursorAdapter extends CursorAdapter {
      LayoutInflater inflater;
      public MyCursorAdapter(Context context, Cursor c) {
        super(context, c);
        inflater = LayoutInflater.from(context);
      }

@Override
      public void bindView(View view, Context context, Cursor cursor) {
        //cursor is already setted to requared position, just get your column
        TextView tv1 = (TextView)view.findViewById(R.id.textView1);
        TextView tv2 = (TextView)view.findViewById(R.id.textView2);
        tv1.setText(cursor.getString(1));
        tv2.setText(cursor.getString(2));
        ImageView myImageView = (ImageView)fimdViewById(R.id.my_image_view);
        if(cursor.getString(5) == "line"){
          myImageView = getResources().getIdentifier("yourpackagename:drawable/line.png");
        }else if(cursor.getString(5) == "wave"){
          myImageView = getResources().getIdentifier("yourpackagename:drawable/wave.png");
        ...
      }

  @Override
          public View newView(Context context, Cursor cursor, ViewGroup parent) {
            //here is view for each raws
            return inflater.inflate(R.layout.my_raw_view, parent, false);
          }
        }
于 2013-02-25T08:25:50.220 回答