2012-04-07 3 views
0

Я пытаюсь передать элемент, нажатый на другую активность, i.e от A до B, используя пользовательские элементыAdapter с sqlite.Получить пользовательские элементыAdapter id с помощью курсора android

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

1) Получить элемент щелкнул положение с помощью курсора 2) Пропустите пункт нажал на другой вид деятельности

Я пытаюсь сделать похож на this примера, но использовать свой собственный адаптер у меня есть купол следующих так далеко.

активность 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; 
} 

активность 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; 
    } 
} 

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

+0

делать у получает какую-либо ошибку? – MAC

+0

Какая ошибка. –

+0

@Adil yes Я получаю следующее 04-07 10: 43: 13.348: E/AndroidRuntime (12696): java.lang.ClassCastException: java.lang.Integer 04-07 10: 43: 13.348: E/AndroidRuntime (12696): \t at com.studentAccommodationFinder.PropertyResult.onListItemClick (PropertyResult.java:87) 04-07 10: 43: 13.348: E/AndroidRuntime (12696): \t at – SomCollection

ответ

1

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

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

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 значения из idsArrayList по в позиции поставки:

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); 
+0

Хорошо, если это работает только для адаптера курсора, как я могу использовать его в своем собственном адаптере элементов?, справа на этом – SomCollection

+0

@ user1176963 Вы не сказали, что ваш пользовательский адаптер расширяет, 'ArrayAdapter',' BaseAdapter', 'SimpleCursorAdapter' и т. д.? – Luksprog

+0

он расширяет базовый адаптер – SomCollection

1

Ваш по вопросу хотел бы это

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

Это не дает мне ошибку, но никогда не щелкает!, ONItemClicked не работает. – SomCollection

+0

Проверьте, что вы зарегистрировались для слушателя, а также проверьте, есть ли у вашего представления кнопка, чем сделать ее фокусной ложью. – Krutik

+0

СПАСИБО! реально оценили, он работал ужинать – SomCollection