0

我已经搜索了一段时间,但找不到任何可以帮助我解决问题的东西。

我在列表视图中有一个类别列表。我从 SQLiteDatabase 获取这些并使用 SimpleCursorAdapter 将它们放入列表中。这工作正常...

现在,如果我单击一个类别,我想启动一个新活动,显示具有该特定类别的所有项目。将参数传递给新活动不是问题 - 在这里找到了关于如何执行此操作的很好的教程:将数据或参数传递给另一个活动

我的问题是我无法从所选视图中获取 id...我想要来自所选类别的 id,以便我可以获取具有该 categoryId 的项目。这是我尝试从视图中获取 id 的地方 - 我使用了很多不同的方法(包括一些对列表视图、项目和位置的摆弄,......这是我最近的尝试)并且不知道是什么下次试试……

    @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);
4

2 回答 2

0

为此,您可以使用自定义适配器,并且可以在 HashMap 中设置 id。这是一个示例:

    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));     
            }
});
于 2011-10-24T10:11:35.043 回答
0

尝试关注

@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);
}
于 2011-10-24T10:51:31.223 回答