Получить пользовательский идентификатор адаптера элементов с помощью курсора Android

Я пытаюсь передать элемент, на который нажали, другому действию, то есть от A до B, используя пользовательский адаптер элементов с sqlite.

Как я могу добиться следующего?

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

Деятельность Б:

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

Пожалуйста, дайте мне решение.


person SomCollection    schedule 07.04.2012    source источник
comment
@Adil да, я получаю следующее 04-07 10:43:13.348: E/AndroidRuntime(12696): java.lang.ClassCastException: java.lang.Integer 04-07 10:43:13.348: E/AndroidRuntime(12696 ): в com.studentAccommodationFinder.PropertyResult.onListItemClick(PropertyResult.java:87) 04-07 10:43:13.348: E/AndroidRuntime(12696): в   -  person SomCollection    schedule 07.04.2012


Ответы (2)


В onListItemClick() у вас уже есть идентификатор строки из курсора, это 4-й параметр, id (это работает только для адаптеров курсора).

Прежде всего также создайте и ArrayList, который будет содержать long значений (идентификаторы строк от курсора):

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);
person user    schedule 07.04.2012
comment
Хорошо, если это работает только для адаптера курсора, как я могу использовать его в своем собственном адаптере пользовательского элемента? Вы имеете право на это - person SomCollection; 07.04.2012
comment
@ user1176963 Вы не сказали, что расширяет ваш собственный адаптер, ArrayAdapter, BaseAdapter, SimpleCursorAdapter и т. д.? - person user; 07.04.2012
comment
Большое спасибо за вашу помощь, ваше решение будет работать, однако это то, что я получаю. Метод add (Long) в типе ArrayList‹Long› не применим для аргументов (String), то есть когда я пытаюсь сделать идентификаторы .добавить (temp_id); - person SomCollection; 07.04.2012
comment
@ user1176963 Извините, должно быть long temp_id = cursor.getLong(0); - person user; 07.04.2012

Это должно понравиться вашему элементу

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);}
person Krutik    schedule 07.04.2012
comment
Это не дает мне ошибки, однако никогда не нажимается! ONItemClicked не работает. - person SomCollection; 07.04.2012
comment
проверьте, что вы зарегистрировались для слушателя, а также проверьте, есть ли в вашем представлении кнопка, чем сделать ее фокусируемой false - person Krutik; 07.04.2012