实际效果图如上
那么 接下来正式开始
首先见一个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