欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android利用GridView实现单选功能

程序员文章站 2023-12-16 10:47:22
先看看gridview实现单选效果 如果是你需要的,你可以继续往下看了 实现起来比较简单,直接上代码 主activity的布局,一个button用来跳...

先看看gridview实现单选效果

Android利用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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: