???容器與適配器:?????????????http://t.csdnimg.cn/ZfAJ7
示例圖:
實體類 Demo.java
package com.example.mygridviewadapter.entity;public class Demo {private String text;private int img;public Demo(String text, int img) {this.text = text;this.img = img;}public String getText() {return text;}public void setText(String text) {this.text = text;}public int getImg() {return img;}public void setImg(int img) {this.img = img;}
}
適配器 寫個類繼承BaseAdapter?
package com.example.myspinnerbaseadapter;import android.content.Context;
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 com.example.myspinnerbaseadapter.entity.Data;import java.util.List;public class DataAdapter extends BaseAdapter {private List<Data> dataList;private Context context;static class ViewHoler{ImageView imageView;TextView textView;}//BaseAdapter最基本的幾個方法:// 1. getCount 填充的數據集數// 2.getItem 數據集中指定索引對應的數據項// 3. getItemId 指定行所對應的ID// 4. getView 每個Item所顯示的類容public DataAdapter(List<Data> dataList, Context context) {this.dataList = dataList;this.context = context;}@Overridepublic int getCount() {return dataList.size();}@Overridepublic Object getItem(int position) {return dataList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHoler holer = null;if(holer == null){holer = new ViewHoler();//獲取 自定義view布局 獲取相關屬性convertView = LayoutInflater.from(context).inflate(R.layout.spinner_view,parent,false);holer.imageView = convertView.findViewById(R.id.bntImg);holer.textView = convertView.findViewById(R.id.btnTitle);convertView.setTag(holer);}else {holer = (ViewHoler)convertView.getTag();}//設置值holer.imageView.setBackgroundResource(dataList.get(position).getImg());holer.textView.setText(dataList.get(position).getTitile());return convertView;}
}
MainActivity.java
package com.example.myspinnerbaseadapter;import androidx.appcompat.app.AppCompatActivity;import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;import com.example.myspinnerbaseadapter.entity.Data;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener{//組件private Spinner spinnerOne,spinner;private List<Data> dataList =null;private Context context;private DataAdapter dataAdapter =null;//圖片private int[] arr = {R.mipmap.a,R.mipmap.b,R.mipmap.c,R.mipmap.d,R.mipmap.e,R.mipmap.f,};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//上下文context = this;spinnerOne = findViewById(R.id.tbnSpiOne);spinner = findViewById(R.id.tbnSpi);dataList = new ArrayList<>();//循環傳入數據for (int i = 0 ; i < arr.length;i++){dataList.add(new Data("樣式"+i,arr[i]));}dataAdapter = new DataAdapter(dataList,context);// 往容器中設置適配器spinner.setAdapter(dataAdapter);//事件spinnerOne.setOnItemSelectedListener(this);spinner.setOnItemSelectedListener(this);}@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id) {if(parent.getId() == R.id.tbnSpiOne){Toast.makeText(this,"您選擇了"+parent.getItemAtPosition(position),Toast.LENGTH_SHORT).show();} else if (parent.getId() == R.id.tbnSpi) {TextView textView = findViewById(R.id.btnTitle);Toast.makeText(this,"您選擇了"+textView.getText().toString(),Toast.LENGTH_SHORT).show();}}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="請選擇頭像:"android:textSize="16sp"/><!-- 下拉列表entries :數據源android:dropDownHorizontalOffset:設置列表框的水平偏移距離android:dropDownVerticalOffset:設置列表框的水平豎直距離android:dropDownSelector:列表框被選中時的背景android:dropDownWidth:設置下拉列表框的寬度android:gravity:設置里面組件的對其方式android:popupBackground:設置列表框的背景android:prompt:設置對話框模式的列表框的提示信息(標題),只能夠引用string.xml中的資源 id,而不能直接寫字符串android:spinnerMode:列表框的模式,有兩個可選值: dialog:對話框風格的窗口dropdown: 下拉菜單風格的窗口(默認) 可選屬性:android:entries:使用數組資源設置下拉列表框的列表項目
--><Spinnerandroid:id="@+id/tbnSpiOne"android:prompt="@string/title"android:entries="@array/data"android:layout_width="wrap_content"android:layout_height="wrap_content"android:dropDownWidth="100dp"android:spinnerMode="dialog"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="請選擇頭像:"android:textColor="#ff00ff"android:textSize="16sp"/>--><Spinnerandroid:id="@+id/tbnSpi"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>
spinner_view.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"><!-- 圖片--><ImageViewandroid:id="@+id/bntImg"android:layout_width="64dp"android:layout_height="64dp"/><!--文字 --><TextViewandroid:id="@+id/btnTitle"android:layout_width="match_parent"android:layout_height="64dp"android:text="樣式1"android:textSize="24sp"android:gravity="center_vertical"/></LinearLayout>