Как добавить идентификатор в ListViewItem, используя SimpleCursorAdapter и SQLiteDatabase - PullRequest
0 голосов
/ 24 октября 2011

Я уже некоторое время ищу эту тему, но не могу найти ничего, что могло бы помочь мне решить мою проблему.

У меня есть список категорий в списке. Я извлекаю их из SQLiteDatabase и использую SimpleCursorAdapter, чтобы поместить их в список. Это отлично работает ...

Теперь, если я нажму на категорию, я хочу запустить новое действие, отображающее все элементы с этой конкретной категорией. Передача параметров в новое действие не является проблемой - здесь вы найдете хороший учебник о том, как это сделать: Передача данных или параметра в другое действие

Моя проблема в том, что я не могу получить идентификатор из выбранного представления ... Мне нужен идентификатор из выбранной категории, чтобы я мог получить элементы с этим categoryId. Именно здесь я пытаюсь получить идентификатор вне поля зрения - я использовал много разных методов (включая некоторые манипуляции со списком, элементом и позицией, ... это моя последняя попытка) и не знаю, что попробовать дальше ...

    @Override
    public void onItemClick(AdapterView<?> listview, View item, int position,
            long itemId) {
        Intent intent = new Intent();
        Bundle bun = new Bundle();

        bun.putInt("categoryId", (int) itemId);

        intent.setClass(MainActivity.this, ItemsPerCategoryActivity.class);
        intent.putExtras(bun);          
        startActivity(intent);
    }

Кто-нибудь сталкивался с такой же проблемой, и если у вас есть, у вас есть какой-нибудь совет для меня, как это сделать?

Вот как проблема была решена:

        Cursor c = (Cursor)listview.getAdapter().getItem(position);
        int id = c.getInt(c.getColumnIndex(_ID)); //0 = index id
        //Log.d("Category id", id + "");

        Intent intent = new Intent();
        Bundle bun = new Bundle();

        bun.putInt("categoryId", id);

        intent.setClass(MainActivity.this, ItemsPerCategoryActivity.class);
        intent.putExtras(bun);          
        startActivity(intent);

Ответы [ 2 ]

0 голосов
/ 24 октября 2011

Попробуйте выполнить

@Override
public void onItemClick(AdapterView<?> listview, View item, int position,
        long itemId) {

    Cursor c = (Cursor)adatper.getItem(position); //adapter = cursor adapter object
    int id = c.getInt(0)// 0 is index of id.
    Intent intent = new Intent();
    Bundle bun = new Bundle();

    bun.putInt("categoryId", id);

    intent.setClass(MainActivity.this, ItemsPerCategoryActivity.class);
    intent.putExtras(bun);          
    startActivity(intent);
}
0 голосов
/ 24 октября 2011

Для этого вы можете использовать пользовательский адаптер, и там вы можете установить идентификаторы в HashMap. Вот пример:

    public class DemoAdapter extends SimpleCursorAdapter
    {
        Cursor dataCursor;
        LayoutInflater mInflater;
        Context context;

        public static HashMap<Integer,String> myList=new HashMap<Integer,String>();    

        public DemoAdapter(Context context, int layout, Cursor dataCursor, String[] from,int[] to)
        {
            super(context, layout, dataCursor, from, to);
            this.context=context;
            this.dataCursor = dataCursor;
            mInflater = LayoutInflater.from(context);
            this.fromWhere=fromWhere;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent)
        {

            final ViewHolder holder;

            if(convertView==null)
            {
                     convertView = mInflater.inflate(R.layout.my_list_item, null);
                     holder = new ViewHolder();

                     holder.cName=(TextView)convertView.findViewById(R.id.contactName);        
            convertView.setTag(holder);
            }
            else
                    holder=(ViewHolder)convertView.getTag();

            dataCursor.moveToPosition(position);

            String id=Integer.toString(dataCursor.getInt(dataCursor.getColumnIndexOrThrow("_id")));
            myList.put(position, id);

            holder.cName.setText(dataCursor.getString("contact_name"));

            return convertView;
       }

       static class ViewHolder
       {
          TextView cName;          
       }
  }  

Теперь используйте это как-

listView.setOnItemClickListener(new OnItemClickListener{

                  @Override
              public void onItemClick(AdapterView<?> arg0, View view, int position,long id) {

                         int id=Integer.parseInteger(DemoAdapter.myList.get(position));     
            }
});
...