2

有没有办法检查 a 中的元素gridview

我找不到toggle()方法,或者setChecked(true),我gridview有一个扩展 BaseAdapter 的适配器,我想在检查元素时更改背景颜色(不仅是选中)。

我会喜欢 ListView:GridView.setChoicheMode(MULTICHOICE)然后item.toggle()oritem.setChecked(true)并将检查状态存储到视图中。

编辑:

我添加了一个空CheckedTextView来存储检查状态。但是有没有更清洁的方法来做到这一点?

Edit2 现在我可以做我想做的事了,但是当我向下滚动gridview 然后向上滚动时,不再选择选中的项目。

boolean checked = layout.getCheckedItemPositions().get(position);
                if(checked){
                    check.toggle();
                    view.setBackgroundColor(getResources().getColor(android.R.color.transparent));
                }
                else{
                    check.toggle();
                    view.setBackgroundColor(getResources().getColor(android.R.color.holo_green_light));
                }

其中 layout 是 gridview 的布局。我想我必须修改我的适配器的 getView 方法,但是这段代码不起作用:

CheckedTextView check = (CheckedTextView) layout.findViewById(R.id.txv_grid_check);
        boolean checked = check.isChecked();
        if(checked){
            layout.setBackgroundColor(c.getResources().getColor(android.R.color.holo_green_light));
        }
        else{
            layout.setBackgroundColor(c.getResources().getColor(android.R.color.transparent));
        }

编辑 3

我认为没有办法做我想做的事(将状态存储在 CheckedTextView 元素中),因为滚动列表或网格视图时视图被破坏并重新创建。所以我需要将项目的状态处理到适配器中。我使用了一个 int 的 HashSet 来存储检查项目的位置,并创建了一些公共方法来从 gridview 处理这个列表。在 gridview 活动中,可以获取适配器,然后执行 myadapter.check(int position) 或 uncheck(int position)。然后在适配器中,进入 getView() 方法,我们需要检查一个位置是否在列表中,并设置适当的背景颜色。

4

2 回答 2

2

我希望这个答案会对你有所帮助。在此示例中,网格项布局中有 TextView,您可以将其更改为 CheckedTextView 或 Checkbox。在 getView() 检查状态并设置网格项目的背景颜色。

于 2013-01-03T07:55:47.723 回答
0

使用此代码。这对我来说很有用。

public View getView(final int position, View convertView, ViewGroup parent) {
            View vi=convertView;
            if(convertView==null)
                vi = inflater.inflate(R.layout.list_row, null);

             final MyDat mydat;// = new MyDat();
            if (position >= MyViewedMeItemList.size()) {
                mydat = new MyDat();

            } 
            else
            {
                mydat = MyViewedMeItemList.get(position);
            }

            mydat.title = (TextView)vi.findViewById(R.id.title); // title
            mydat.artist = (TextView)vi.findViewById(R.id.artist); // artist name
            mydat.duration = (TextView)vi.findViewById(R.id.duration); // duration
            mydat.thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image
            mydat.cccheckbomx=(CheckBox)vi.findViewById(R.id.rajesh);        
            mydat.cccheckbomx.setVisibility(View.VISIBLE);


            if (mydat.myCheckStatus) {
                // Toast.makeText(MessageInboxDelete.this, "true --->" +
                // position,
                // Toast.LENGTH_SHORT).show();
                mydat.cccheckbomx.setChecked(true);
            } else {
                /*
                 * Toast.makeText(MessageInboxDelete.this, "false --->" +
                 * position, Toast.LENGTH_SHORT).show();
                 */
                mydat.cccheckbomx.setChecked(false);
            }

           mydat.cccheckbomx.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View paramView) {
                    // TODO Auto-generated method stub
                    //Toast.makeText(context, "Rajesh", Toast.LENGTH_SHORT).show();




                    int gridchild;
                    gridchild = list.getChildCount();
                    for (int j = 0; j < gridchild; j++) {
                        // DrawArea_Steptwo.gridview.getChildAt(j);

                    //  Toast.makeText(context, "Rajesh", Toast.LENGTH_SHORT).show();
                        RelativeLayout gridchildlayout = (RelativeLayout) list
                                .getChildAt(j);

                        CheckBox tempRadioToggle = (CheckBox) gridchildlayout
                                .findViewById(R.id.rajesh);

                        tempRadioToggle.setChecked(false);                    

                        MyDat tempViewholder = MyViewedMeItemList.get(j);
                        tempViewholder.myCheckStatus = false;
                    }


                    for(int j = 0; j < MyViewedMeItemList.size(); j++) {
                        MyDat tempViewholder = MyViewedMeItemList.get(j);
                        tempViewholder.myCheckStatus = false;
                    }
                    CheckBox tempRadioToggle = (CheckBox) paramView.findViewById(R.id.rajesh);      
                    tempRadioToggle.setChecked(true);

                    MyDat tempViewholder = MyViewedMeItemList.get(position);

                            if (tempViewholder.myCheckStatus == false) {
                                tempViewholder.myCheckStatus = true;
                                // tempViewholder.deleteRadioButton.setChecked(true);


                            } else {
                                tempViewholder.myCheckStatus = false;
                                // tempViewholder.deleteRadioButton.setChecked(false);

                            }


                }
            });
            HashMap<String, String> song = new HashMap<String, String>();
            song = data.get(position);

            // Setting all values in listview
            mydat.title.setText(song.get(CustomizedListView.KEY_TITLE));
            mydat.artist.setText(song.get(CustomizedListView.KEY_ARTIST));
            mydat.duration.setText(song.get(CustomizedListView.KEY_DURATION));
            imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), mydat.thumb_image);

            if (MyViewedMeItemList.size() <= position) {
                MyViewedMeItemList.add(mydat);
            }



            return vi;
        }

     public  class MyDat{

           Boolean myCheckStatus=false;
           TextView title ;
           TextView artist;
           TextView duration;
           ImageView thumb_image;
           CheckBox cccheckbomx;

       }
    }
于 2013-01-03T09:29:30.357 回答