欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

介紹

Spinner是一種點(diǎn)一下后供用戶可以上下選擇用的組件。

我們直接來(lái)看一個(gè)例子說(shuō)明這個(gè)組件是做什么用的。

我們放大點(diǎn)看

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

項(xiàng)目結(jié)構(gòu)

隨著前幾章對(duì)Adapter知識(shí)的牢固掌握,我們可以看到,這個(gè)例子依舊使用的是Adapter設(shè)計(jì)模式。

  • 我們?cè)陧?xiàng)目里放置5個(gè)圖片用來(lái)顯示“槍”;
  • 我們做一個(gè)ViewBean-GunBean;
  • 我們做一個(gè)用于被Adapter渲染用的細(xì)節(jié)布局item_spin_guns.xml,它的使用是點(diǎn)擊下部那個(gè)選擇你的愛(ài)槍這個(gè)spinner被點(diǎn)擊時(shí),彈出的那個(gè)可縱向選擇用的視圖;

來(lái)看代碼吧。

前端代碼

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="選擇武器等級(jí)"
        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="選擇你的愛(ài)槍"
        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="機(jī)槍-大鏈鋸"
        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中制作的那個(gè)可接受泛型的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();
    }
 
    //添加一個(gè)元素
    public void add(T item) {
        if (data == null) {
            data = new ArrayList<>();
        }
        data.add(item);
        notifyDataSetChanged();
    }
 
    //往特定位置,添加一個(gè)元素
    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;   //存儲(chǔ)ListView 的 item中的View
        private View item;                  //存放convertView
        private int position;               //游標(biāo)
        private Context context;            //Context上下文
 
        //構(gòu)造方法,完成相關(guān)初始化
        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;
        }
        /**
         * 獲取當(dāng)前條目
         */
        public View getItemView() {
            return item;
        }
 
        /**
         * 獲取條目位置
         */
        public int getItemPosition() {
            return position;
        }
 
        /**
         * 設(shè)置文字
         */
        public ViewHolder setText(int id, CharSequence text) {
            View view = getView(id);
            if(view instanceof TextView) {
                ((TextView) view).setText(text);
            }
            return this;
        }
 
        /**
         * 設(shè)置圖片
         */
        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;
        }
 
        /**
         * 設(shè)置標(biāo)簽
         */
        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;
    //判斷是否為剛進(jìn)去時(shí)觸發(fā)onItemSelected的標(biāo)志
    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èn)識(shí)",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",
                                ">>>>>>您選的級(jí)別為:"+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) {
 
        }
    }
}

請(qǐng)自己動(dòng)手運(yùn)行一下,試試看效果吧。 

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

相關(guān)文章

最新評(píng)論