2 u011732740 u011732740 于 2015.06.13 14:37 提问

Android获取GridView里的item内容时获取的内容不是点击的。

图片说明
如图,快餐,烧烤这些白色btn是gridview里的item。这个页面生成了多个gridview,我想在点击其中一个btn时候获取btn的text作为参数传递。使用

 gridView=new MyGridView(FenleiActivity.this);
        gridView.setVerticalSpacing(10);
        gridView.setHorizontalSpacing(15);
        gridView.setNumColumns(3);

        hashlist=new ArrayList<HashMap<String,Object>>();
        for(int j=0 ;j<Two_classify_list.size();j++){
            HashMap<String, Object> map= new HashMap<String, Object>();
            map.put("fenlei_btnlist_btn_text", Two_classify_list.get(j));
            hashlist.add(map);
        }
        sAdapter=new SimpleAdapter(this,hashlist,
                R.layout.fenlei_btnlist_item,
                new String[]{"fenlei_btnlist_btn_text"},new int[]{R.id.fenlei_btnlist_btn_text});
        gridView.setAdapter(sAdapter);

        gridView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {

                 HashMap<String,String> map=(HashMap<String,String>)gridView.getItemAtPosition(arg2);
                 String btnText=map.get("fenlei_btnlist_btn_text");
                 System.out.println("------------------------!!!!!!-------------------"+btnText);


                    Bundle bundle=new Bundle();
                    bundle.putString("oneClassify", text);
                    bundle.putString("twoClassify", btnText);

                    Intent intent=new Intent(FenleiActivity.this,GoodsShowActivity.class);
                    intent.putExtras(bundle);
                    startActivity(intent);
            }
        });

因为不同的gridview中btn的数量是不同的,不知道为什么有时候点的比较靠后的btn时候就提示数组下标越界,还有就是不管我点哪个gridview,只要点的是第几个btn提示的内容是相同的,这意思就是说他不会动态获取点的那个gridview呗,为什么呢

3个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.06.13 16:46
已采纳

查了一下你以前发的代码,这是那段代码的其中一段吧。
gridview是全局的,你onitemclick的时候,这个gridview表示的是最后一个的gridview,所以不管怎么点,都是最后一个gridview的内容。
改成

增加自定义OnItemClickListener,把gridview存起来。
 class MyOnItemClickListener implements OnItemClickListener{
        private GridView gv = null;
        public MyOnItemClickListener(GridView gv){
            this.gv = gv;
        }
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            HashMap<String,String> map=(HashMap<String,String>)gv.getItemAtPosition(arg2);  //这里使用存起来的gridview

        }

    }

    使用时gridView.setOnItemClickListener(new MyOnItemClickListener(gridView));
u011732740
u011732740 嗯嗯,搞定了,一直自己在捣鼓一个项目嘛,谢谢啦
2 年多之前 回复
91program
91program   Ds   Rxr 2015.06.13 14:45

不同的 ListView 应该对于不同的 OnItemClickListener 方法
每个 Listview 单独处理都应该是没有问题的,如果出现如你所说的越界的现象,应该是你将不同的 Listview 搞混淆了。

91program
91program 回复SaluteWarmTinct: 无论你是动态生成、还是静态创建,一个 ListView 对应一个 OnItemClickListener 的基本准则是不会变的。否则,点击不同的 ListView 让一个 OnItemClickListener 来响应肯定是不对的。
2 年多之前 回复
91program
91program 回复SaluteWarmTinct: 你只动态生成了一个 Listview 吗?如果是,则肯定是只有一个。这样的话,只能在创建时根据不同的前提来区分,这样会比较麻烦。
2 年多之前 回复
u011732740
u011732740 上传代码是动态生成gridview的方法,我有在方法里传参数判断在哪个大类下,所以只有这一个方法,在不同的大类下生成了不同的gridview,肯定只能有这一个 OnItemClickListener方法的,有没有办法区分呢
2 年多之前 回复
sinat_28690155
sinat_28690155   2015.06.13 15:50

代码不算吧,大分类呢?

sinat_28690155
sinat_28690155 GridView1.RenderControl(oHtmlTextWriter);中的GridView1改成你那Textbox1,如果有多条记录可以放到循环里吧,只是提供个思路~
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片