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

Android常用控件Spinner的使用方法大全

 更新時間:2023年10月18日 10:22:23   作者:海棠聽風782  
這篇文章主要給大家介紹了關(guān)于Android常用控件Spinner的使用方法,Spinner其實是一個列表選擇框,不過Android的列表選擇框并不需要顯示下拉列表,而是相當于彈出一個菜單供用戶選擇,需要的朋友可以參考下

Spinner介紹

在Android開發(fā)過程中,Spinner下拉控件是比較常用的控件,它可以以下拉框和dialog的方式進行展示。默認是下拉框方式。

Spinner效果

上圖可以看出實現(xiàn)Spinner的方式有兩種:

一、ArrayAdater 數(shù)組適配器

二、自定義適配器。

ArrayAdapter所需要的代碼

1、布局界面activity_main.xml代碼

2、MainActivity.java代碼

3、spinner.item_1.xml代碼

@BindView()代碼解釋

首先說明一下@BindView的作用,從字面意思可以看出這個意思是:綁定視圖。
他的作用等同于  spinner=findViewById(R.id.main_spinner);,
需要使用的小伙伴可以在app目錄下的bulid.grale中添加這二行代碼。
        implementation 'com.jakewharton:butterknife:10.0.0'
        annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'`
然后在MainAcitivty.java的Oncreate方法里面添加       ButterKnife.bind(this);

下面是bind的兩個參數(shù)

 public static Unbinder bind(@NonNull Object target, @NonNull View source) {}
 //Obejct:默認填this
 //source:這里需要加入View,在自定義適配器中有用到
    class ViewHolder {

        @BindView(R.id.spinner_item_2_imageView)
        ImageView imageView2;
        @BindView(R.id.spinner_item_2_name)
        TextView name2;

        public ViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    }
}

ArrayAdapter代碼解析

String:在這里不一定是String,也可以是int ,float,double等等,根據(jù)你數(shù)據(jù)的類型判斷這里改填什么
getBaseContext:這里需要傳入Context的對象,直接getBaseContext或者getContext都可以。
R.layout.spinner.item_1:這里需要傳入一個布局,直接new Layout Resouce File就可以了。
data:數(shù)據(jù)源

ArrayAdapter數(shù)組適配器 也就介紹完了,看起來還是很簡單,接下來,我們需要實現(xiàn)圖片+文字的方式出現(xiàn),需要使用到自定義適配器了。

自定義適配器所需要的代碼

1、activity.main.xml布局

    <Spinner
        android:id="@+id/main_spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:spinnerMode="dropdown"
        />
        //android:spinnerMode="dropdown"         dialog方式展示

2、spinner.item_2.xml代碼

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/spinner_item_2_imageView"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_weight="1"
        android:src="@drawable/ic_launcher_background" />

    <TextView
        android:id="@+id/spinner_item_2_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:gravity="center"
        android:text="下拉框1"/>
</LinearLayout>
//由于TextView和ImageView在同一個LinearLayout中,我們將布局平分兩部分
//在View中分別添加android:layout_weight="1"

3、SpinnerBean.java代碼

public class SpinnerBean {
    int ImageView;
    String name;

    public int getImageView() {
        return ImageView;
    }

    public void setImageView(int imageView) {
        ImageView = imageView;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public SpinnerBean(int imageView, String name) {
        ImageView = imageView;
        this.name = name;
    }
}

4、SpinnerAdapter.java

public class SpinnerAdapter extends BaseAdapter {
    Context context;
    List<SpinnerBean> mDatas;

    public SpinnerAdapter(Context context, List<SpinnerBean> mDatas) {
        this.context = context;
        this.mDatas = mDatas;
    }

    @Override
    public int getCount() {
        return mDatas.size();
    }

    @Override
    public Object getItem(int position) {
        return mDatas.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int posiiton, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.spinner_item_2, null);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.imageView2.setImageResource(mDatas.get(posiiton).getImageView());
        holder.name2.setText(mDatas.get(posiiton).getName());
        return convertView;
    }

    class ViewHolder {

        @BindView(R.id.spinner_item_2_imageView)
        ImageView imageView2;
        @BindView(R.id.spinner_item_2_name)
        TextView name2;

        public ViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    }
}

5、MainActivty.java代碼

    List<SpinnerBean> customData;
    private void initSpinner2() {
        customData = new ArrayList<>();
        SpinnerBean spinnerBean = new SpinnerBean(R.drawable.ic_launcher_background, "下拉框1");
        SpinnerBean spinnerBean2 = new SpinnerBean(R.mipmap.ic_launcher_round, "下拉框2");
        SpinnerBean spinnerBean3 = new SpinnerBean(R.drawable.ic_launcher_background, "下拉框3");
        SpinnerBean spinnerBean4 = new SpinnerBean(R.mipmap.ic_launcher_round, "下拉框4");
        SpinnerBean spinnerBean5 = new SpinnerBean(R.drawable.ic_launcher_background, "下拉框5");
        SpinnerBean spinnerBean6 = new SpinnerBean(R.mipmap.ic_launcher_round, "下拉框6");
        SpinnerBean spinnerBean7 = new SpinnerBean(R.drawable.ic_launcher_background, "下拉框7");
        SpinnerBean spinnerBean8 = new SpinnerBean(R.mipmap.ic_launcher_round, "下拉框8");
        SpinnerBean spinnerBean9 = new SpinnerBean(R.drawable.ic_launcher_background, "下拉框9");
        customData.add(spinnerBean);
        customData.add(spinnerBean2);
        customData.add(spinnerBean3);
        customData.add(spinnerBean4);
        customData.add(spinnerBean5);
        customData.add(spinnerBean6);
        customData.add(spinnerBean7);
        customData.add(spinnerBean8);
        customData.add(spinnerBean9);
        SpinnerAdapter spinnerAdapter = new SpinnerAdapter(getBaseContext(), customData);
        spinner2.setAdapter(spinnerAdapter);
    }

自定義適配器代碼解析

首先介紹一下為什么需要創(chuàng)建SpinnerBean,java和spinner.item_2.xml。

使用Android已有的適配器只能指定一個數(shù)據(jù)類型,無法加載由多個(String、int)組成的Bean,這些就使用到Java中的泛型

List泛型的作用:可以動態(tài)的添加索引序列。其中SpinnerBean.java就給我們展示如何定義一個泛型。

    int ImageView;
    String name;
       public SpinnerBean(int imageView, String name) {
        ImageView = imageView;
        this.name = name;
    }
    //按住alt+int鍵        快速構(gòu)建get、set和構(gòu)造方法
    //創(chuàng)建好之后,在MainAcitivty中new List<SpinnerBean>就可以添加數(shù)據(jù)了

SpinnerAdapter自定義適配器

自定義適配器中有四種方法:getCount(),getItem(),getItemId(),getView()
getCount():獲取數(shù)據(jù)的總條數(shù)
getItem():獲取索引值所對應(yīng)的對象
getItemId():獲取索引值所對應(yīng)的對象名稱
getView():獲取界面

前三個比較容易理解,說一下第四個getView()

position:表示位置
convertView:這里是自定義適配器優(yōu)化的一個方面,可以對一個View進行緩存,只需要改變數(shù)據(jù)即可,不用創(chuàng)建getCount()個View。
parent:…

convertView內(nèi)存優(yōu)化的代碼

        ViewHolder holder = null;
        if (convertView == null) {//convertView暫時還沒有布局
        //將需要展示的layout賦值給convertView,方便使用
            convertView = LayoutInflater.from(context).inflate(R.layout.spinner_item_2, null);
            //將帶有convertView的ViewHolder賦值給holder
            holder = new ViewHolder(convertView);
            //設(shè)置View
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

總結(jié)

到此這篇關(guān)于Android常用控件Spinner的使用方法詳解的文章就介紹到這了,更多相關(guān)Android控件Spinner使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論