Android利用GridView实现单选功能
程序员文章站
2023-12-18 19:33:34
先看看gridview实现单选效果
如果是你需要的,你可以继续往下看了
实现起来比较简单,直接上代码
主activity的布局,一个button用来跳...
先看看gridview实现单选效果
如果是你需要的,你可以继续往下看了
实现起来比较简单,直接上代码
主activity的布局,一个button用来跳转到筛选activity一个textview用来显示筛选后的到的结果
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.duanlian.gridviewsingleselectordomo.mainactivity"> <button android:layout_width="match_parent" android:layout_height="50dp" android:onclick="buttonclick" android:text="去筛选"/> <textview android:id="@+id/tv_result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="30dp" android:textcolor="@color/coloraccent" android:layout_centerinparent="true" android:text="筛选结果"/> </relativelayout>
mainactivity你的代码逻辑,注释已经加上
package com.duanlian.gridviewsingleselectordomo; import android.content.intent; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.view; import android.widget.textview; public class mainactivity extends appcompatactivity { private textview mtextview; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mtextview = (textview) findviewbyid(r.id.tv_result); } /** * button的点击监听 * @param view */ public void buttonclick(view view) { //跳转到筛选的activity intent intent = new intent(mainactivity.this, singleselectoractivity.class); //通过带返回值的跳转来的到下一个页面带过来的值 startactivityforresult(intent,888); } @override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); if (requestcode == 888 && resultcode == 999) { //拿到上一个页面finish后带过来的值 string pos = data.getstringextra("pos"); mtextview.settext(pos); } } }
然后就是筛选activity,布局就一个gridview用来显示待选项,
一个button用来点击返回主activity并且把选择的值带过去
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_single_selector" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.duanlian.gridviewsingleselectordomo.singleselectoractivity"> <button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="50dp" android:onclick="buttonfinish" android:text="选择完成"/> <gridview android:id="@+id/gridview" android:layout_below="@+id/button" android:layout_width="match_parent" android:layout_height="match_parent" android:columnwidth="80dp" android:horizontalspacing="5dp" android:verticalspacing="10dp" android:numcolumns="auto_fit"/> </relativelayout>
然后就是筛选逻辑
package com.duanlian.gridviewsingleselectordomo; import android.content.intent; import android.os.bundle; import android.support.v7.app.appcompatactivity; import android.view.view; import android.widget.adapterview; import android.widget.gridview; import java.util.arraylist; import java.util.list; public class singleselectoractivity extends appcompatactivity { private gridview mgridview; private list<string> mlist; private gridviewadapter madapter; int selectorposition = 0; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_single_selector); initview(); } private void initview() { mgridview = (gridview) findviewbyid(r.id.gridview); //添加数据 mlist = new arraylist<>(); for (int i = 0; i < 100; i++) { mlist.add("第 " + i + " 个"); } madapter = new gridviewadapter(this, mlist); mgridview.setadapter(madapter); //gridview的点击事件 mgridview.setonitemclicklistener(new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { //把点击的position传递到adapter里面去 madapter.changestate(position); selectorposition = position; } }); } /** * button的点击监听 * * @param view */ public void buttonfinish(view view) { intent intent = new intent(); intent.putextra("pos", "第 " + selectorposition + " 个"); setresult(999, intent); finish(); } }
主要的状态改变还是在adapter里面
package com.duanlian.gridviewsingleselectordomo; import android.content.context; import android.graphics.color; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.relativelayout; import android.widget.textview; import java.util.list; /** * gridview的adapter */ public class gridviewadapter extends baseadapter { private context mcontext; private list<string> mlist; private int selectorposition; public gridviewadapter(context context, list<string> mlist) { this.mcontext = context; this.mlist = mlist; } @override public int getcount() { return mlist != null ? mlist.size() : 0; } @override public object getitem(int position) { return mlist != null ? mlist.get(position) : null; } @override public long getitemid(int position) { return mlist != null ? position : 0; } @override public view getview(int position, view convertview, viewgroup parent) { convertview = view.inflate(mcontext, r.layout.item_gridview, null); relativelayout mrelativelayout = (relativelayout) convertview.findviewbyid(r.id.ll); textview textview = (textview) convertview.findviewbyid(r.id.tv); textview.settext(mlist.get(position)); //如果当前的position等于传过来点击的position,就去改变他的状态 if (selectorposition == position) { mrelativelayout.setbackgroundresource(r.drawable.grid_shap_two); textview.settextcolor(color.parsecolor("#ff4081")); } else { //其他的恢复原来的状态 mrelativelayout.setbackgroundresource(r.drawable.grid_shap_one); textview.settextcolor(color.parsecolor("#3f51b5")); } return convertview; } public void changestate(int pos) { selectorposition = pos; notifydatasetchanged(); } }
还有item布局
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <relativelayout android:id="@+id/ll" android:layout_width="100dp" android:layout_height="32dp" android:layout_centerinparent="true" android:layout_margin="5dp" android:background="@drawable/grid_shap_one" > <textview android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerhorizontal="true" android:ellipsize="none" android:gravity="center" android:singleline="true" android:text="英超" android:maxlength="7" android:textcolor="@color/colorprimary" android:textsize="13sp"/> </relativelayout> </relativelayout>
如果你想点击跳转到筛选activity且待筛选的按钮中,显示你之前选择后的那个按钮状态是选中状态,其实也很简单,只要你把你选中后的position缓存下来,点进去到筛选activity,实例化adapter后调用 madapter.changestate(position);把你需要改变状态的按钮的position传递过去就行了
其他的小细节请下载demo
点击下载demo
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。