GridView實現item的全選、未選、多選


1.先看效果圖

2.MainActivity布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <GridView
        android:layout_marginTop="100dp"
        android:id="@+id/grid_view"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:numColumns="3"
        android:listSelector="@android:color/transparent"
        android:layout_marginLeft="12dp"
        android:layout_marginRight="12dp">

    </GridView>

    <Button
        android:layout_marginTop="100dp"
        android:id="@+id/btn_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="清空"/>

    <Button
        android:id="@+id/btn_button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="全選"/>

</LinearLayout>

3.item布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/grid_view_ll"
        android:layout_margin="3dp"
        android:background="@drawable/gridview_background_color"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="45dp">

        <ImageView
            android:id="@+id/grid_view_iv"
            android:layout_marginRight="2dp"
            android:layout_width="15dp"
            android:layout_height="15dp" />

        <TextView
            android:id="@+id/grid_view_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="14sp"/>

    </LinearLayout>


</LinearLayout>

4.創建一個GridView數據構造類:

public class GridViewInfo {

    private String name;
    private int icon;
    private boolean checked;

    public GridViewInfo ( int icon, String name, boolean checked){
        this.icon = icon;
        this.name = name;
        this.checked = checked;
    }

    public String getName () {
        return name;
    }

    public void setName ( String name ) {
        this.name = name;
    }

    public int getIcon () {
        return icon;
    }

    public void setIcon ( int icon ) {
        this.icon = icon;
    }

    public boolean isChecked () {
        return checked;
    }

    public void setChecked ( boolean checked ) {
        this.checked = checked;
    }
}

5.MainActivity代碼:

public class MainActivity extends Activity {

    private GridView mGridView;
    private GridViewAdapter adapter;
    private List<GridViewInfo> mData = new ArrayList<>();
    private Button button,button2;

    @Override
    protected void onCreate ( @Nullable Bundle savedInstanceState ) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mGridView = (GridView) findViewById(R.id.grid_view);
        button = (Button) findViewById(R.id.btn_button);
        button2 = (Button) findViewById(R.id.btn_button2);

        //初始化數據
        String[] merchant = getResources().getStringArray(R.array.supplier_filtrate_text);
        TypedArray typedArray2 = getResources().obtainTypedArray(R.array.supplier_filtrate_icon);
        for (int i = 0; i < merchant.length; i++){
            mData.add(new GridViewInfo(typedArray2.getResourceId(i,0), merchant[i], false));
        }

        //創建數據適配器並綁定適配器
        adapter = new GridViewAdapter(this, mData);
        mGridView.setAdapter(adapter);

        //設置列表點擊事件
        mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick ( AdapterView<?> parent, View view, int position, long id ) {
                //得到選中狀態
                boolean checked = mData.get(position).isChecked();
                if (!checked){
                    mData.get(position).setChecked(true);
                    Toast.makeText(MainActivity.this, "選中了第" + position + "個", Toast.LENGTH_SHORT).show();
                } else {
                    mData.get(position).setChecked(false);
                    Toast.makeText(MainActivity.this, "取消選中第" + position + "個", Toast.LENGTH_SHORT).show();
                }
                adapter.notifyDataSetChanged();
            }
        });

        //設置清空全部選中
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick ( View v ) {
                for (int i = 0; i < mData.size(); i++){
                    mData.get(i).setChecked(false);
                }
                adapter.notifyDataSetChanged();
                Toast.makeText(MainActivity.this, "清空全部選中", Toast.LENGTH_SHORT).show();
            }
        });

        //設置全部選中
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick ( View v ) {
                for (int i = 0; i < mData.size(); i++){
                    mData.get(i).setChecked(true);
                }
                adapter.notifyDataSetChanged();
                Toast.makeText(MainActivity.this, "全部選中", Toast.LENGTH_SHORT).show();
            }
        });
    }

}

6.適配器:

public class GridViewAdapter extends BaseAdapter {

    private Context mContext;
    private List<GridViewInfo> mData = new ArrayList<>();

    public GridViewAdapter ( Context context, List<GridViewInfo> mData ) {
        this.mContext = context;
        this.mData = mData;
    }

    @Override
    public int getCount () {
        return mData.size();
    }

    @Override
    public Object getItem ( int position ) {
        return mData.get(position);
    }

    @Override
    public long getItemId ( int position ) {
        return position;
    }

    @Override
    public View getView ( int position, View convertView, ViewGroup parent ) {
        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(mContext).inflate(R.layout.item, null);
            holder.mImageView = (ImageView) convertView.findViewById(R.id.grid_view_iv);
            holder.mTextView = (TextView) convertView.findViewById(R.id.grid_view_tv);
            holder.mLayout = (LinearLayout) convertView.findViewById(R.id.grid_view_ll);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder)convertView.getTag();
        }
        holder.mTextView.setText(mData.get(position).getName());
        holder.mImageView.setImageResource(mData.get(position).getIcon());
        holder.mLayout.setSelected(mData.get(position).isChecked());

        return convertView;
    }


    class ViewHolder {
        private TextView mTextView;
        private ImageView mImageView;
        private LinearLayout mLayout;

    }

}

7.在values文件夾array.xml中添加要填充數據:

<resources>

    <array name="supplier_filtrate_text">
        <item>蜂鳥專送</item>
        <item>准時達</item>
        <item>會員領紅包</item>
        <item>品牌商家</item>
        <item>食安保</item>
        <item>新店</item>
        <item>開發票</item>
        <item>接受預定</item>
    </array>

    <array name="supplier_filtrate_icon">
        <item>@drawable/icon_selected</item>
        <item>@drawable/icon_selected</item>
        <item>@drawable/icon_selected</item>
        <item>@drawable/icon_selected</item>
        <item>@drawable/icon_selected</item>
        <item>@drawable/icon_selected</item>
        <item>@drawable/icon_selected</item>
        <item>@drawable/icon_selected</item>
    </array>
    
</resources>

8.在drawable文件中添加item背景選中和未選中的顏色:

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

    <item android:drawable="@color/color_gray" android:state_selected="false"/>
    <item android:drawable="@color/colorPrimary" android:state_selected="true"/>

</selector>

如果item背景需要設置圓角代碼改為:

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

    <item android:state_selected="false">
        <shape android:shape="rectangle">
            <!-- 圓角 -->
            <corners android:radius="2dp" />
            <!--填充顏色為灰色-->
            <solid android:color="@color/color_gray" />
            <!-- 描邊 -->
            <stroke android:width="1dp" android:color="@color/color_gray" />
        </shape>
    </item>

    <item android:state_selected="true">
        <shape android:shape="rectangle">
            <!--圓角-->
            <corners android:radius="2dp" />
            <!--填充顏色為藍色-->
            <solid android:color="@color/colorPrimary" />
            <!--描邊-->
            <stroke android:width="1dp" android:color="@color/colorPrimary" />
        </shape>
    </item>

</selector>

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM