一、Spinner介绍 在Android开发过程中,Spinner下拉控件是比较常用的控件,它可以以下拉框和dialog的方式进行展示。默认是下拉框方式。 Spinner效果 上图可以看出实现Spi
在Android开发过程中,Spinner下拉控件是比较常用的控件,它可以以下拉框和dialog的方式进行展示。默认是下拉框方式。
上图可以看出实现Spinner的方式有两种:一、ArrayAdater 数组适配器 二、自定义适配器。
首先说明一下@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的两个参数
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); } }}
String:在这里不一定是String,也可以是int ,float,double等等,根据你数据的类型判断这里改填什么
getBaseContext:这里需要传入Context的对象,直接getBaseContext或者getContext都可以。
R.layout.spinner.item_1:这里需要传入一个布局,直接new Layout Resouce File就可以了。
data:数据源
ArrayAdapter数组适配器 也就介绍完了,看起来还是很简单,接下来,我们需要实现图片+文字的方式出现,需要使用到自定义适配器了。
<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方式展示
<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"
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; }}
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); } }}
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); }
首先介绍一下为什么需要创建SpinnerBean,java和spinner.item_2.xml。使用Android已有的适配器只能指定一个数据类型,无法加载由多个(String、int)组成的Bean,这些就使用到Java中的泛型
List泛型的作用:可以动态的添加索引序列。其中SpinnerBean.java就给我们展示如何定义一个泛型。
int ImageView; String name; public SpinnerBean(int imageView, String name) { ImageView = imageView; this.name = name; } //按住alt+int键 快速构建get、set和构造方法 //创建好之后,在MainAcitivty中new List就可以添加数据了
自定义适配器中有四种方法:getCount(),getItem(),getItemId(),getView()
getCount():获取数据的总条数
getItem():获取索引值所对应的对象
getItemId():获取索引值所对应的对象名称
getView():获取界面
前三个比较容易理解,说一下第四个getView()
position:表示位置
convertView:这里是自定义适配器优化的一个方面,可以对一个View进行缓存,只需要改变数据即可,不用创建getCount()个View。
parent:…
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); //设置View convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); }
来源地址:https://blog.csdn.net/qq_62079241/article/details/129719066
--结束END--
本文标题: Android常用控件Spinner的使用(详解)
本文链接: https://www.lsjlt.com/news/385072.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
一口价域名售卖能注册吗?域名是网站的标识,简短且易于记忆,为在线用户提供了访问我们网站的简单路径。一口价是在域名交易中一种常见的模式,而这种通常是针对已经被注册的域名转售给其他人的一种方式。
一口价域名买卖的过程通常包括以下几个步骤:
1.寻找:买家需要在域名售卖平台上找到心仪的一口价域名。平台通常会为每个可售的域名提供详细的描述,包括价格、年龄、流
443px" 443px) https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294.jpg https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294-768x413.jpg 域名售卖 域名一口价售卖 游戏音频 赋值/切片 框架优势 评估指南 项目规模
0