0

我正在尝试使用带有 sqlite 的自定义 itemsAdapter 将单击的项目传递给另一个活动,即从 A 到 B。

我怎样才能实现以下目标?

1)使用光标获取项目点击位置 2)将点击的项目传递给另一个活动

我正在尝试与示例类似,但使用我自己的自定义适配器到目前为止我已经完成了以下操作。

活动一:

public void onListItemClick(ListView parent, View view, int position, long id) {
Intent intent = new Intent(this,F32Activity.class);
Cursor cursor = (Cursor) itemsAdapter.getItem(position);
intent.putExtra("PROPERTY_ID", cursor.getInt(cursor.getColumnIndex("_id")));

startActivity(intent);
return;
 }

活动 B:

      propertyId = getIntent().getIntExtra("PROPERTY_ID", 0);
    System.out.println(employeeId);
    SQLiteDatabase db = (new Helper(this)).getWritableDatabase();
    Cursor cursor = db
            .rawQuery("SELECT * from my_table WHERE pro._id = ?",
                    new String[] { "" + propertyId });

添加了适配器

private void getItemId(int position) {
    // TODO Auto-generated method stub

}

private void getDataAndPopulate() {
    // TODO Auto-generated method stub
    image = new ArrayList<byte[]>();       
    bedrooms= new ArrayList<String>();
    address= new ArrayList<String>();
    propType= new ArrayList<String>();

    Cursor cursor = getEvents(" gall,properties where  properties._id = gall._id  " );

    while (cursor.moveToNext()) {
        //String temp_id = cursor.getString(0);
        byte[] temp_image = cursor.getBlob(2);
        String temp_identifier = cursor.getString(1);
        String temp_price = cursor.getString(3);
        String temp_bedrooms = cursor.getString(4);
        String temp_address = cursor.getString(5);
        String temp_propType = cursor.getString(6);


        image.add(temp_image);
        //System.out.println(image);

        bedrooms.add(temp_bedrooms);
        address.add(temp_address);
        propType.add(temp_propType);


}
    String[] identifierArray = (String[]) bedrooms.toArray(new String[bedrooms
                                                                    .size()]);
   itemsAdapter = new ItemsAdapter(PropertyResult.this,
   cursor, R.layout.activity_f9, identifierArray);
   setListAdapter(itemsAdapter);

}

private class ItemsAdapter extends BaseAdapter {
    String[] items;

    public ItemsAdapter(Context context, Cursor cursor,int textViewResourceId,
            String[] items) {
        this.items = items;
    }

    public View getView(final int POSITION, View convertView,
            ViewGroup parent) {
        TextView desc;
        TextView cap;
        TextView ident;
        TextView pric;
        TextView bedroom;
        TextView addres;
        TextView propertytyp;
        View view = convertView;
        ImageView img;
        if (view == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = vi.inflate(R.layout.activity_f9, null);

        }
        img = (ImageView) view.findViewById(R.id.image);        

        bedroom = (TextView) view.findViewById(R.id.bedrooms);
        addres = (TextView) view.findViewById(R.id.address);
        propertytyp = (TextView) view.findViewById(R.id.propertytype);          


        bedroom.setText("£"+bedrooms.get(POSITION));
        addres.setText(address.get(POSITION));
        propertytyp.setText(propType.get(POSITION));

        img.setImageBitmap(BitmapFactory.decodeByteArray(
        image.get(POSITION), 0, image.get(POSITION).length));

        return view;

    }

    public int getCount() {
        return items.length;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }
}

请给我一个解决方案。

4

2 回答 2

1

onListItemClick()您已经拥有游标的行 ID 中,是第 4 个参数id(这仅适用于游标适配器)。

首先还要创建ArrayList并将保存long值(来自光标的行ID):

ids = new ArrayList<Long>();
//...
while (cursor.moveToNext()) {
   String temp_id = cursor.getString(0);// if 0 is your column containing the id(check it)
   ids.add(temp_id);
   //...
}

然后在您的适配器中覆盖该方法并根据提供的位置getItemId返回long值:ids ArrayList

   public long getItemId(int position) {
        return ids.get(position);
    }

然后在你onListItemClick()简单地使用id参数:

public void onListItemClick(ListView parent, View view, int position, long id) {
   Intent intent = new Intent(this,F32Activity.class);
   intent.putExtra("PROPERTY_ID", id);
   startActivity(intent);
}

然后在接收活动中:

propertyId = getIntent().getLongExtra("PROPERTY_ID", 0);
于 2012-04-07T10:39:28.960 回答
1

你的 on Item 应该是这样的

public void onItemClick(AdapterView<?> arg0, View arg1, int position,
        long arg3) {

    String strEventName, strEventDate;
    int Id;
    Cursor c = (Cursor) arg0.getAdapter().getItem(position);
    intent.putExtra("PROPERTY_ID", cursor.getInt(cursor.getColumnIndex("_id")));
    startActivity(intent);}
于 2012-04-07T10:47:16.560 回答