Android利用GridView實(shí)現(xiàn)單選功能
先看看GridView實(shí)現(xiàn)單選效果
如果是你需要的,你可以繼續(xù)往下看了
實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,直接上代碼
主Activity的布局,一個(gè)Button用來(lái)跳轉(zhuǎn)到篩選Activity一個(gè)TextView用來(lái)顯示篩選后的到的結(jié)果
<?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="篩選結(jié)果"/> </RelativeLayout>
MainActivity你的代碼邏輯,注釋已經(jīng)加上
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的點(diǎn)擊監(jiān)聽(tīng) * @param view */ public void buttonClick(View view) { //跳轉(zhuǎn)到篩選的activity Intent intent = new Intent(MainActivity.this, SingleSelectorActivity.class); //通過(guò)帶返回值的跳轉(zhuǎn)來(lái)的到下一個(gè)頁(yè)面帶過(guò)來(lái)的值 startActivityForResult(intent,888); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 888 && resultCode == 999) { //拿到上一個(gè)頁(yè)面finish后帶過(guò)來(lái)的值 String pos = data.getStringExtra("pos"); mTextView.setText(pos); } } }
然后就是篩選Activity,布局就一個(gè)GridView用來(lái)顯示待選項(xiàng),
一個(gè)Button用來(lái)點(diǎn)擊返回主Activity并且把選擇的值帶過(guò)去
<?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); //添加數(shù)據(jù) mList = new ArrayList<>(); for (int i = 0; i < 100; i++) { mList.add("第 " + i + " 個(gè)"); } mAdapter = new GridViewAdapter(this, mList); mGridView.setAdapter(mAdapter); //gridView的點(diǎn)擊事件 mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //把點(diǎn)擊的position傳遞到adapter里面去 mAdapter.changeState(position); selectorPosition = position; } }); } /** * button的點(diǎn)擊監(jiān)聽(tīng) * * @param view */ public void buttonFinish(View view) { Intent intent = new Intent(); intent.putExtra("pos", "第 " + selectorPosition + " 個(gè)"); setResult(999, intent); finish(); } }
主要的狀態(tài)改變還是在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)); //如果當(dāng)前的position等于傳過(guò)來(lái)點(diǎn)擊的position,就去改變他的狀態(tài) if (selectorPosition == position) { mRelativeLayout.setBackgroundResource(R.drawable.grid_shap_two); textView.setTextColor(Color.parseColor("#FF4081")); } else { //其他的恢復(fù)原來(lái)的狀態(tài) 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>
如果你想點(diǎn)擊跳轉(zhuǎn)到篩選Activity且待篩選的按鈕中,顯示你之前選擇后的那個(gè)按鈕狀態(tài)是選中狀態(tài),其實(shí)也很簡(jiǎn)單,只要你把你選中后的position緩存下來(lái),點(diǎn)進(jìn)去到篩選Activity,實(shí)例化Adapter后調(diào)用 mAdapter.changeState(position);把你需要改變狀態(tài)的按鈕的position傳遞過(guò)去就行了
其他的小細(xì)節(jié)請(qǐng)下載demo
點(diǎn)擊下載demo
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用Android中BitmapShader制作自帶邊框的圓形頭像
這篇文章給大家介紹了一下如何利用BitmapShader制作圓形頭像,可以自定義要顯示的圖片,邊框顏色和邊框?qū)挾鹊?,有需要的朋友們可以參考借鑒。2016-09-09Android同時(shí)安裝Release和Debug版本的方法
這篇文章主要介紹了Android同時(shí)安裝Release和Debug版本的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Android編程經(jīng)典代碼集錦(復(fù)制,粘貼,瀏覽器調(diào)用,Toast顯示,自定義Dialog等)
這篇文章主要介紹了Android編程經(jīng)典代碼集錦,包括Android的復(fù)制,粘貼,瀏覽器調(diào)用,Toast顯示,自定義Dialog等實(shí)現(xiàn)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2016-01-01Android利用繪制緩沖實(shí)現(xiàn)代碼雨效果
看過(guò)很多代碼雨的前端實(shí)現(xiàn),卻很少看到過(guò)Android代碼雨效果的實(shí)現(xiàn),當(dāng)然 open gl es的實(shí)現(xiàn)是有的,一個(gè)主要的原因是,在Android Canvas繪制時(shí),很少有人考慮使用繪制緩沖,所以本文將給大家介紹Android如何利用繪制緩沖實(shí)現(xiàn)代碼雨效果,需要的朋友可以參考下2024-03-03Android中Glide加載圓形圖片和圓角圖片實(shí)例代碼
本篇文章主要介紹了Android中Glide加載圓形圖片和圓角圖片實(shí)例代碼,具體一定的參考價(jià)值,有興趣的可以了解一下2017-05-05Android OpenGLES如何給相機(jī)添加濾鏡詳解
這篇文章主要給大家介紹了關(guān)于Android OpenGLES如何給相機(jī)添加濾鏡的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08