最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android入門之利用Spinner實現(xiàn)彈出選擇對話框

 更新時間:2022年11月19日 09:19:34   作者:TGITCIC  
這篇文章主要為大家詳細介紹了Android里如何巧用Spinner做彈出選擇對話框,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下

介紹

Spinner是一種點一下后供用戶可以上下選擇用的組件。

我們直接來看一個例子說明這個組件是做什么用的。

我們放大點看

我們這次的課程目標就是實現(xiàn)這樣的一種點一下然后彈出選擇框的樣式。

項目結構

隨著前幾章對Adapter知識的牢固掌握,我們可以看到,這個例子依舊使用的是Adapter設計模式。

  • 我們在項目里放置5個圖片用來顯示“槍”;
  • 我們做一個ViewBean-GunBean;
  • 我們做一個用于被Adapter渲染用的細節(jié)布局item_spin_guns.xml,它的使用是點擊下部那個選擇你的愛槍這個spinner被點擊時,彈出的那個可縱向選擇用的視圖;

來看代碼吧。

前端代碼

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="5dp"
    tools:context=".MainActivity">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="選擇武器等級"
        android:textColor="#44BDED"
        android:textSize="18sp" />
 
    <Spinner
        android:id="@+id/spinLevel"
        android:layout_width="100dp"
        android:layout_height="64dp"
        android:entries="@array/data"
        android:prompt="@string/title"
        android:spinnerMode="dialog" />
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="選擇你的愛槍"
        android:textColor="#F5684A"
        android:textSize="18sp" />
 
    <Spinner
        android:id="@+id/spinGuns"
        android:layout_width="wrap_content"
        android:layout_height="64dp" />
 
</LinearLayout>

item_spin_guns.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="5dp">
 
    <ImageView
        android:id="@+id/gunIcon"
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:src="@drawable/golden_qiang1" />
 
    <TextView
        android:id="@+id/gunName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="15dp"
        android:text="機槍-大鏈鋸"
        android:textSize="16sp" />
 
</LinearLayout>

后端代碼

GunBean.java

package org.mk.android.demospinneradapter;
 
import java.io.Serializable;
 
public class GunBean implements Serializable {
    private static final long serialVersionUID = 1L;
    private int gunIcon;
    private String gunName="";
 
    public GunBean(){
 
    }
    public GunBean(String gunName,int gunIcon){
        this.gunName=gunName;
        this.gunIcon=gunIcon;
    }
    public int getGunIcon() {
        return gunIcon;
    }
 
    public void setGunIcon(int gunIcon) {
        this.gunIcon = gunIcon;
    }
 
    public String getGunName() {
        return gunName;
    }
 
    public void setGunName(String gunName) {
        this.gunName = gunName;
    }
}

GenericAdapter.java

我們依舊延用我們上一篇在自定義Adapter中制作的那個可接受泛型的Adapter。

package org.mk.android.demospinneradapter;
 
import android.content.Context;
import android.util.Log;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
 
import java.util.ArrayList;
import java.util.List;
 
public abstract class GenericAdapter<T> extends BaseAdapter {
    private List<T> data;
    private int layoutRes;
 
    public GenericAdapter() {
    }
 
    public GenericAdapter(List<T> data, int layoutRes) {
        this.data = data;
        this.layoutRes = layoutRes;
    }
 
    @Override
    public int getCount() {
        Log.i("app",">>>>>>data.size: "+data.size());
        if(data!=null) {
            return data.size();
        }
        return 0;
    }
 
    @Override
    public T getItem(int position) {
        return data.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Log.i("app",">>>>>>into getView");
        ViewHolder holder = ViewHolder.bind(parent.getContext(), convertView, parent, layoutRes
                , position);
        bindView(holder, getItem(position));
        return holder.getItemView();
    }
 
    //添加一個元素
    public void add(T item) {
        if (data == null) {
            data = new ArrayList<>();
        }
        data.add(item);
        notifyDataSetChanged();
    }
 
    //往特定位置,添加一個元素
    public void add(int position,T item){
        if (data == null) {
            data = new ArrayList<>();
        }
        data.add(position, item);
        notifyDataSetChanged();
    }
 
    public void remove(T item) {
        if(data != null) {
            data.remove(item);
        }
        notifyDataSetChanged();
    }
 
    public void remove(int position) {
        if(data != null) {
            data.remove(position);
        }
        notifyDataSetChanged();
    }
 
    public void clear() {
        if(data != null) {
            data.clear();
        }
        notifyDataSetChanged();
    }
 
    public abstract void bindView(ViewHolder holder, T obj);
 
    public static class ViewHolder {
 
        private SparseArray<View> mViews;   //存儲ListView 的 item中的View
        private View item;                  //存放convertView
        private int position;               //游標
        private Context context;            //Context上下文
 
        //構造方法,完成相關初始化
        private ViewHolder(Context context, ViewGroup parent, int layoutRes) {
            mViews = new SparseArray<>();
            this.context = context;
            View convertView = LayoutInflater.from(context).inflate(layoutRes, parent,false);
            convertView.setTag(this);
            item = convertView;
        }
        public static ViewHolder bind(Context context, View convertView, ViewGroup parent,
                                      int layoutRes, int position) {
            ViewHolder holder;
            if(convertView == null) {
                holder = new ViewHolder(context, parent, layoutRes);
            } else {
                holder = (ViewHolder) convertView.getTag();
                holder.item = convertView;
            }
            holder.position = position;
            return holder;
        }
        public <T extends View> T getView(int id) {
            T t = (T) mViews.get(id);
            if(t == null) {
                t = (T) item.findViewById(id);
                mViews.put(id, t);
            }
            return t;
        }
        /**
         * 獲取當前條目
         */
        public View getItemView() {
            return item;
        }
 
        /**
         * 獲取條目位置
         */
        public int getItemPosition() {
            return position;
        }
 
        /**
         * 設置文字
         */
        public ViewHolder setText(int id, CharSequence text) {
            View view = getView(id);
            if(view instanceof TextView) {
                ((TextView) view).setText(text);
            }
            return this;
        }
 
        /**
         * 設置圖片
         */
        public ViewHolder setImageResource(int id, int drawableRes) {
            View view = getView(id);
            if(view instanceof ImageView) {
                ((ImageView) view).setImageResource(drawableRes);
            } else {
                view.setBackgroundResource(drawableRes);
            }
            return this;
        }
 
        /**
         * 設置標簽
         */
        public ViewHolder setTag(int id, Object obj) {
            getView(id).setTag(obj);
            return this;
        }
 
        public ImageView iconImg;
        public TextView iconText;
    }
}

MainActivity.java

package org.mk.android.demospinneradapter;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Spinner;
import android.widget.TextView;
 
import com.google.android.material.navigation.NavigationBarView;
 
import java.util.ArrayList;
import java.util.List;
 
public class MainActivity extends AppCompatActivity {
    private Spinner spin_one;
    private Spinner spin_two;
    private Context mContext;
    //判斷是否為剛進去時觸發(fā)onItemSelected的標志
    private boolean one_selected = false;
    private boolean two_selected = false;
    private List<GunBean> mData = null;
    private BaseAdapter myAdadpter = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mData = new ArrayList<GunBean>();
        bindViews();
    }
    private void bindViews() {
        spin_one = (Spinner) findViewById(R.id.spinLevel);
        spin_two = (Spinner) findViewById(R.id.spinGuns);
 
        mData.add(new GunBean("ak47",R.drawable.golden_qiang1));
        mData.add(new GunBean("大狙",R.drawable.golden_qiang2));
        mData.add(new GunBean("AK74",R.drawable.golden_qiang3));
        mData.add(new GunBean("不認識",R.drawable.normal_qiang1));
        mData.add(new GunBean("突擊步槍",R.drawable.normal_qiang2));
 
 
        myAdadpter = new GenericAdapter<GunBean>(mData,
                R.layout.item_spin_guns) {
            @Override
            public void bindView(ViewHolder holder, GunBean obj) {
                holder.setImageResource(R.id.gunIcon, obj.getGunIcon());
                holder.setText(R.id.gunName, obj.getGunName());
            }
        };
        spin_two.setAdapter(myAdadpter);
        spin_one.setOnItemSelectedListener(new OnItemSelectedListener());
        spin_two.setOnItemSelectedListener(new OnItemSelectedListener());
    }
    private class OnItemSelectedListener implements AdapterView.OnItemSelectedListener{
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            switch (parent.getId()){
                case R.id.spinLevel:
                    if(one_selected){
                        Log.i("app",
                                ">>>>>>您選的級別為:"+parent.getItemAtPosition(position).toString());
                    }else one_selected = true;
                    break;
                case R.id.spinGuns:
                    if(two_selected){
                        TextView gunName =
                                (TextView) view.findViewById(R.id.gunName);
                        Log.i("app",
                                ">>>>>>您選的槍為:"+gunName.getText().toString());
                    }else two_selected = true;
                    break;
            }
        }
 
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
 
        }
    }
}

請自己動手運行一下,試試看效果吧。 

以上就是Android入門之利用Spinner實現(xiàn)彈出選擇對話框的詳細內容,更多關于Android Spinner選擇對話框的資料請關注腳本之家其它相關文章!

相關文章

  • Android 如何使用SQLite保存數(shù)據(jù)

    Android 如何使用SQLite保存數(shù)據(jù)

    對于重復數(shù)據(jù)或結構化數(shù)據(jù)(例如聯(lián)系信息),將數(shù)據(jù)保存到數(shù)據(jù)庫是理想選擇,SQL 數(shù)據(jù)庫的主要原則之一是架構,即數(shù)據(jù)庫組織方式的正式聲明,本篇文章介紹在 Android 上使用 SQLite 數(shù)據(jù)庫,感興趣的朋友一起看看吧
    2024-03-03
  • 如何使用Mock修改Android設備上的features

    如何使用Mock修改Android設備上的features

    這篇文章主要介紹了如何使用Mock修改Android設備上的features,想了解Mock的同學可以參考下
    2021-04-04
  • Android jni調試打印char陣列的實例詳解

    Android jni調試打印char陣列的實例詳解

    這篇文章主要介紹了Android jni調試打印char陣列的實例詳解的相關資料,通過此文希望能幫助到大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08
  • Android編程基礎之Menu功能菜單設計實例

    Android編程基礎之Menu功能菜單設計實例

    這篇文章主要介紹了Android編程基礎之Menu功能菜單,結合實例形式分析了基本的Menu功能菜單原理、定義與響應機制,需要的朋友可以參考下
    2016-10-10
  • Android使用SimpleDateFormat警告介紹

    Android使用SimpleDateFormat警告介紹

    大家好,本篇文章講的是Android使用SimpleDateFormat警告介紹,感興趣的同學快來看一看吧,希望對你起到幫助
    2021-11-11
  • Android ListView position詳解及實例代碼

    Android ListView position詳解及實例代碼

    這篇文章主要介紹了Android ListView position的相關資料,在開發(fā)Android 應用的時候你真的用對了嗎?這里給大家徹底解釋下,需要的朋友可以參考下
    2016-10-10
  • 使用genymotion訪問本地上Tomcat上數(shù)據(jù)的方法

    使用genymotion訪問本地上Tomcat上數(shù)據(jù)的方法

    下面小編就為大家?guī)硪黄褂胓enymotion訪問本地上Tomcat上數(shù)據(jù)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Android.mk文件中添加第三方jar文件的方法

    Android.mk文件中添加第三方jar文件的方法

    這篇文章主要介紹了Android.mk文件中添加第三方jar文件及引用第三方jar包的方法,需要的朋友可以參考下
    2018-01-01
  • Android?使用flow實現(xiàn)倒計時的方式

    Android?使用flow實現(xiàn)倒計時的方式

    這篇文章主要介紹了Android?使用flow實現(xiàn)倒計時的方式,借助Flow這個工具,更加優(yōu)雅地實現(xiàn)這個需求功能,文末給大家整理了Android?實現(xiàn)倒計時的幾種方式,需要的朋友可以參考下
    2022-04-04
  • 淺談Android App開發(fā)中Fragment的創(chuàng)建與生命周期

    淺談Android App開發(fā)中Fragment的創(chuàng)建與生命周期

    這篇文章主要介紹了Android App開發(fā)中Fragment的創(chuàng)建與生命周期,文中詳細地介紹了Fragment的概念以及一些常用的生命周期控制方法,需要的朋友可以參考下
    2016-02-02

最新評論

乾安县| 全州县| 江孜县| 子长县| 绥德县| 张北县| 耒阳市| 大竹县| 沂水县| 全椒县| 鄂尔多斯市| 集贤县| 台东市| 永仁县| 望城县| 南投市| 冕宁县| 崇礼县| 福贡县| 江津市| 汉沽区| 日照市| 隆昌县| 剑川县| 和政县| 九龙城区| 通化县| 文成县| 青州市| 鹤庆县| 日土县| 瓦房店市| 鄂托克旗| 鄂托克前旗| 兴安盟| 礼泉县| 云梦县| 仙居县| 通河县| 旬邑县| 岳西县|