Android利用GridView实现单选功能

先看看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

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

(0)

相关推荐

  • Android利用GridView实现单选效果

    1.实现如图所示的单选效果 由于Android提供的单选按钮radiobutton只能单行或单列显示,且样式并不美观,故可用GridView进行改造,实现单选效果,而要实现这样的效果重点就在GridView的适配器这块了. 首先是GridView的item的XML: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical&

  • 详谈自定义View之GridView单选 金额选择Layout-ChooseMoneyLayout

    思路: 外层控件用的是GridView,里面每个item放一个FrameLayout,FrameLayout里面有Checkbox和ImageView,chechBox添加background实现选中效果,选中背景为透明,显示item的勾勾图标,不选中checkbox就有背景,挡住选中的勾勾..重写GridView,实现监听和数据适配,用一个接口返回选中的数据. 代码: ChooseMoneyLayout.java public class ChooseMoneyLayout extends G

  • Android利用GridView实现单选功能

    先看看GridView实现单选效果 如果是你需要的,你可以继续往下看了 实现起来比较简单,直接上代码 主Activity的布局,一个Button用来跳转到筛选Activity一个TextView用来显示筛选后的到的结果 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi

  • Android使用GridView实现日历功能示例(详细代码)

    Android使用GridView实现日历功能示例,代码有点多,发个图先: 如果懒得往下看的,可以直接下载源码吧,最近一直有人要,由于时间太久了,懒得找出来整理,今天又看到有人要,正好没事就整理了一下 源码下载.... 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an

  • android实现RecyclerView列表单选功能

    本文实例为大家分享了android实现RecyclerView列表单选功能的具体代码,供大家参考,具体内容如下 实现思维 1.首先在一行的xml布局中添加一个选中效果的icon图片,未选中的情况下INVISIBLE或者GONE 都可以,推荐使用INVISIBLE它会占用布局位置但是不显示,这样可以避免布局中其他控件因为勾选布局的消失而轻微变动位置 2.将适配器类中的onCreateViewHolder方法重写添加按键监听,onBindViewHolder方法中重写添加判断点击的位置(具体原理请查

  • android利用handler实现倒计时功能

    本文实例为大家分享了android利用handler实现倒计时的具体代码,供大家参考,具体内容如下 xml <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app=&qu

  • Android利用Sensor实现传感器功能

    本文实例为大家分享了Android利用Sensor实现传感器的具体代码,供大家参考,具体内容如下 一.传感器的使用 1.传感器的类型: 方向传感器::Sensor.TYPE_ORIENTATION 加速度(重力)传感器:sensor.TYPE_ACCELEFOMETER 光线传感器:sensor.TYPT_LIGHT 磁场传感器:sensor.TYPE_MANGNETIC_FIELD 距离(临近性)传感器:Sensor.TYPE_FROXIMITY 温度传感器:Sensor.TYPE_TEMPE

  • Android利用CountDownTimer实现倒计时功能 Android实现停留5s跳转到登录页面

    利用CountDownTimer实现倒计时,停留5s跳转到登录页面功能,具体如下 举个栗子,引导页面最后一个界面要停留5s跳转到登录页面.代码如下: //假设 这是引导页面最后一个界面 public class MainActivity extends Activity { private TextView count_time; private MyCountDownTimer myCountDownTimer; @Override protected void onCreate(Bundle

  • Android利用Chronometer实现倒计时功能

    项目需要实现一个计时的功能,利用Chronometer虽然可以很方便的实现计时功能,但需要的却是一个倒计时控件. 百度了一下方法不少,倒计时的却没有,于是用Chronometer封装了一个倒计时的类,本着开源的精神,分享给大家! 废话不说了,进入主题 首先xml布局如下: <com.example.anticlockwisedemo.Anticlockwise android:id="@+id/id_timer" android:layout_width="wrap_c

  • Android利用Intent实现记事本功能(NotePad)

    本文实例为大家分享了Intent如何实现一个简单的记事本功能的演示过程,供大家参考,具体内容如下 1.运行截图 单击右上角[-]会弹出[添加]菜单项,长按某条记录会弹出快捷菜单[删除]项. 2.主要设计步骤 (1)添加引用 鼠标右击[引用]à[添加引用],在弹出的窗口中勾选"System.Data"和"System.Data.SQlite",如下图所示: 注意:不需要通过NuGet添加SQLite程序包,只需要按这种方式添加即可. (2)添加图片 到Android

  • android利用service完成计时功能

    本文为大家分享了android service计时功能的具体代码,供大家参考,具体内容如下 源码下载地址:https://github.com/luoye123/Timing 1.首先建立主页面的设计:activity_time.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/r

随机推荐