Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何高亮显示“选择”上的栅格视图项目?_Android - Fatal编程技术网

Android 如何高亮显示“选择”上的栅格视图项目?

Android 如何高亮显示“选择”上的栅格视图项目?,android,Android,我正在创建一个包含图像和文本的网格视图布局。我想要多选项目,但我想突出显示选中的网格项目 这是我的密码: public class FragMent1 extends Fragment{ BaseAdapter MyAdapter; private Context mContext; @SuppressLint("ValidFragment") public FragMent1(Context c) { mContext = c;

我正在创建一个包含图像和文本的网格视图布局。我想要多选项目,但我想突出显示选中的网格项目

这是我的密码:

public class FragMent1 extends Fragment{

        BaseAdapter MyAdapter;
    private Context mContext;

    @SuppressLint("ValidFragment")
    public FragMent1(Context c) {
        mContext = c;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        //View view = inflater.inflate(R.layout.g, null);
        View view = inflater.inflate(R.layout.gridview,null);
        final GridView listView = (GridView) view.findViewById(R.id.mainGrid);
        listView.setAdapter(new Adapter());
        //listView.setSelection(1);
        listView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
        listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {

            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public void onDestroyActionMode(ActionMode mode) {
                // TODO Auto-generated method stub

            }

            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                // TODO Auto-generated method stub

                mode.setTitle("Select Items");
                mode.setSubtitle("One item selected");
                return true;

            }

            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                // TODO Auto-generated method stub


                int selectCount = listView.getCheckedItemCount();
                switch (selectCount) {
                case 1:
                    mode.setSubtitle("One item selected");

                    break;
                default:
                    mode.setSubtitle("" + selectCount + " items selected");

                    break;
                }

                return true;
            }

            @Override
            public void onItemCheckedStateChanged(ActionMode mode, int position,
                    long id, boolean checked) {
                // TODO Auto-generated method stub



                int selectCount = listView.getCheckedItemCount();
                switch (selectCount) {
                case 1:
                    mode.setSubtitle("One item selected");
                    break;
                default:
                    mode.setSubtitle("" + selectCount + " items selected");
                    break;
                }

            }
        });


        return view;
    }

    private class Adapter extends BaseAdapter {

        @Override
        public int getCount() {
            return mThumbIds.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View myView = convertView;

            ImageView image;
            if (convertView == null) {
                image = new ImageView(FragMent1.this.getActivity());
                image.setLayoutParams(new GridView.LayoutParams(85, 85));
                image.setScaleType(ImageView.ScaleType.CENTER_CROP);



                LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);           
                myView = inflater.inflate(R.layout.grid_items_ontap, null);


                // Add The Image!!!           
                ImageView iv = (ImageView)myView.findViewById(R.id.grid_item_image_OnTap);
                iv.setImageResource(mThumbIds[position]);


                // Add The Text!!!
                TextView tv = (TextView)myView.findViewById(R.id.grid_item_text_onTap);
                tv.setText(names[position] );






            }
            return myView;
        }

        private Integer[] mThumbIds = {
                R.drawable.car, R.drawable.car,
                R.drawable.car, R.drawable.car,
                R.drawable.car,R.drawable.car,R.drawable.car
        };

        private String[] names={"ab","cd","ef","gh","ij","kl","mn"};


    }
}
我应该在代码中添加什么来突出显示将要选择的网格项

请建议我做这件事的方法。
提前感谢。

您可以使用选择器突出显示项目

在drawable文件夹中创建一个xml文件

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/blue" android:state_selected="true"/>
    <item android:drawable="@color/transparent"/>

</selector>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/blue" android:state_selected="true"/>
    <item android:drawable="@color/transparent"/>

</selector>

并将gridview的listSelector设置为


android:listSelector=“@drawable/list_selector”

如果您的网格视图位于相对布局内,您可以在那里设置touch listener,以通过使用自定义drawable突出显示所选项目(这里我使用九块补丁图像来指定选择)

或者也可以使用选择器

在drawable文件夹中创建一个xml文件

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/blue" android:state_selected="true"/>
    <item android:drawable="@color/transparent"/>

</selector>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/blue" android:state_selected="true"/>
    <item android:drawable="@color/transparent"/>

</selector>

并将gridview的listSelector设置为

android:listSelector=“@drawable/list_selector”

  • 创建ImageAdapter类
  • 将此参数添加到类中
    private int selectedPosition=-1
  • 将此方法添加到ImageAdapter类

    public void setSelectedPosition(int position) {
        selectedPosition = position;
    }
    
  • 将这些行添加到ImageAdapter类的getView方法的末尾

    if (position == selectedPosition) {
            gridView.setBackgroundColor(Color.BLACK);
        } else {
            gridView.setBackgroundColor(Color.TRANSPARENT);
        }
    
  • 在活动(或片段)中,从ImageAdapter类创建对象
  • 然后将这些行添加到测试中

    GridView gridView = (GridView) view.findViewById(R.id.gridview);
    gridView.setAdapter(adapterImage);
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                                int position, long id) {
            adapterImage.setSelectedPosition(position);
            adapterImage.notifyDataSetChanged();
        }
    });
    
    GridView GridView=(GridView)view.findviewbyd(R.id.GridView);
    setAdapter(adapterImage);
    setOnItemClickListener(新的AdapterView.OnItemClickListener(){
    public void onItemClick(AdapterView父视图、视图v、,
    内部位置,长id){
    适配器图像设置选定位置(位置);
    adapterImage.notifyDataSetChanged();
    }
    });
    

  • 我用
    childItems
    上的
    setTag
    解决了这个问题 这是我的示例代码

     yourGridView.setOnItemClickListener((parent1, view, position1, id1) -> {
    
                if (view.getTag()!=null && view.getTag().equals("Examplename")){
                    view.setBackgroundColor(yourColor);
                    view.setTag("");
                }else{
    
                    view.setTag("Examplename");
                    view.setBackgroundColor(Color.BLUE);
                    int Nums=gridListItems.getChildCount();
                    for (int i=0;  i<=Nums-1; i++ ){
                        if (i!=position1){
                         View child=   gridListItems.getChildAt(i);
                        child.setBackgroundColor(yourColor);
                        }
                    }
                }
    
            });
    
    yourGridView.setOnItemClickListener((parent1,view,position1,id1)->{
    if(view.getTag()!=null&&view.getTag().equals(“Examplename”)){
    view.setBackgroundColor(yourColor);
    view.setTag(“”);
    }否则{
    view.setTag(“Examplename”);
    视图。setBackgroundColor(颜色。蓝色);
    int Nums=gridListItems.getChildCount();
    
    对于(int i=0;i当您在适配器中膨胀视图时,您可以设置在Styles.xml文件中定义的样式。您是否会在我这里进行扩展。我不明白您的意思。我还想知道,在我上面的代码中有MultiChoiceModeListener()在长点击时选择网格项但我需要点击的方法应该被选中。你能告诉我在我上面的代码中删除长点击的方法吗。这样,我就可以满足我的要求了。为什么“GridView”被称为listview?太令人困惑了。好的,它可以工作,但我想在选择其他项目时保留突出显示的项目。意味着无论得到什么项目选中的应该突出显示。它在我的应用程序中不起作用,你能帮我看看我的帖子吗?谢谢。如果我将selector.xml改为下面的。它会起作用。为什么?我正在使用带android 4.4.2的emulator