Android kotlin GridView 的使用

在这里插入图片描述
实际效果图如上
那么 接下来正式开始

首先见一个xml文件,然后在文件中,添加gridview
在这里插入图片描述
其中app:layout_constraintHeight_max=”300dp” 是设置起最大的高度,以防止内容多了会占满屏幕
然后定义item文件,就是gridview的内容,取名叫select_language_item.xml
在这里插入图片描述

然后建立一个 java文件,取名MyGridViewAdapter.java


public class MyGridViewAdapter extends BaseAdapter {
    //声明引用
    private Context mContext;   //这个Context类型的变量用于第三方图片加载时用到
    private LayoutInflater mlayoutInflater;
    private ArrayList<String> data_list;
    private int mCurrentItem = 0;
    private boolean isClick = false;

    //创建一个构造函数
    public MyGridViewAdapter(Context context) {
        this.mContext = context;
        //利用LayoutInflate把控件所在的布局文件加载到当前类中
        mlayoutInflater = LayoutInflater.from(context);
        data_list = new ArrayList<String>();
    }

    public void addList(String note) { //用来给gridview添加元素
        if (!data_list.contains(note)) {
            data_list.add(note);
        }
    }

    @Override
    public int getCount() {
        return data_list.size(); //GridView的数目总共10个
    }

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

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

    //写一个静态的class,把layout_grid_item的控件转移过来使用
    static class ViewHolder {
        public TextView Grid_textview;
    }

    public void setCurrentIndex(int index) {
        mCurrentItem = index;
    }

    public int getCurrentIndex() {
        return mCurrentItem;
    }

    public void setClick(boolean click) {
        this.isClick = click;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            convertView = mlayoutInflater.inflate(R.layout.select_language_item, null);
            holder = new ViewHolder();
            holder.Grid_textview = convertView.findViewById(R.id.itemtext);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        String firstTxt = data_list.get(0);
        String languageData = data_list.get(position);
        if (mCurrentItem == position && isClick) {//点击当前的元素 改变当前元素背景色
            holder.Grid_textview.setBackground(mContext.getResources().getDrawable(R.drawable.language_type_true));
            holder.Grid_textview.setTextColor(Color.parseColor("#ffffff"));
        } else {//让其他元素的背景色不变
            holder.Grid_textview.setBackground(mContext.getResources().getDrawable(R.drawable.language_type_false));
            holder.Grid_textview.setTextColor(Color.parseColor("#000000"));
        }
        if (languageData.equals(firstTxt) && !isClick) {//初始化 选中某个元素
            setCurrentIndex(position);
            holder.Grid_textview.setBackground(mContext.getResources().getDrawable(R.drawable.language_type_true));
            holder.Grid_textview.setTextColor(Color.parseColor("#ffffff"));
        }
        String languageTxt = languageData.split("@")[0];
        holder.Grid_textview.setText(languageTxt);
        return convertView;
    }
}
复制代码

然后在你要调用的文件里初始化 MyGridViewAdapter

    private var myGridViewAdapter: MyGridViewAdapter? = null
    //然后在create周期中声明
    myGridViewAdapter = MyGridViewAdapter(context)
    //然后新建函数赋值
     fun getData() {
        var count = 0
        //iconName 是一个可遍历的元素
        for (i in iconName) {
            count = count + 1
            myGridViewAdapter?.addList(i + "@" + count.toString());
        }
    }
    //在create周期中调用
    getData()
    //然后执行
    gview?.adapter = myGridViewAdapter
        gview?.setOnItemClickListener(AdapterView.OnItemClickListener { adapterView, view, i, l ->
            myGridViewAdapter?.setCurrentIndex(i)//设置当前的index
            myGridViewAdapter?.setClick(true)//设置是否点击
            myGridViewAdapter?.notifyDataSetChanged()//刷新ui
        })

复制代码

那么一个gridview就完成了

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享