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 に答える