SomCollection
SomCollection

Reputation: 481

Get custom itemsAdapter id using cursor android

I'm trying to pass the item clicked to another activity i.e from A to B using a custom itemsAdapter with sqlite.

How can I achieve the following?

1)Get the item clicked position using cursor 2)Pass the item clicked to another activity

I'm trying to do similar to this example but use my own custom adapter I have dome the following so far.

Activity A:

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;
 }

Activity 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 });

Added the Adapter

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;
    }
}

Please kindly give me a solution.

Upvotes: 0

Views: 2132

Answers (2)

user
user

Reputation: 87064

In the onListItemClick() you already have the row id from the cursor, is the 4th parameter, id(this only works for cursor adapters).

First of all also create and ArrayList that will hold long values(the row ids from the cursor):

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);
   //...
}

Then in your adapter override the method getItemId and return the long values from the ids ArrayList according to the position supplied:

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

Then in your onListItemClick() simply use the id parameter:

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

Then in the receiving activity:

propertyId = getIntent().getLongExtra("PROPERTY_ID", 0);

Upvotes: 1

Krutik
Krutik

Reputation: 732

Your on Item should like this

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

Upvotes: 1

Related Questions