Android:如何在gridview中设置项目?

时间:2013-01-03 07:47:04

标签: android gridview

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

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

我会喜欢ListView:GridView.setChoicheMode(MULTICHOICE)然后item.toggle()item.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元素中),因为在滚动列表或gridview时会破坏和重新创建视图。所以我需要处理适配器中的项目状态。我使用了一个HashSet的int来存储已检查项的位置,并且我从gridview处理了一个公共方法来处理这个列表。 在gridview活动中,可以获取适配器然后执行myadapter.check(int position)或取消选中(int position)。 然后在适配器中,进入getView()方法,我们需要检查位置是否在列表中并设置适当的背景颜色。

2 个答案:

答案 0 :(得分:2)

我希望answer能帮到你。在此示例中,网格项布局中有TextView,您可以将其更改为CheckedTextView或Checkbox。在getView()中检查状态并设置Grid项的Background Color。

答案 1 :(得分: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;

       }
    }