Spinner控件
1.在布局文件中添加列表控件,在java代码文件中通过id属性获取到列表控件
2.准备数据源,数据源可以是数组或者集合
3.构建Adapter对象,指定列表中每一项的数据显示样式,并将数据源数据通过构造函数等方式传递给Adapter对象
4.列表控件调用setAdapter()方法,关联创建好的Adapter对象,展示数据源中的数据
package com.example.spinner;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
public class MainActivity extends AppCompatActivity {
private String[] programLang={"Java","C++","python","JavaScript","c#","C"};
private Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner=(Spinner)findViewById(R.id.spiiner); //获取Spinner对象
ArrayAdapter<String>stringArrayAdapter=new ArrayAdapter<String>(this,R.layout.simple_list_item,programLang); //创建适配器对象
spinner.setAdapter(stringArrayAdapter);//为Sprinner对象绑定适配器对象
}
}
Adapter适配器
数据适配器是数据和视图之间的桥梁,类似于一个转换器,将复杂的数据转换成数据用户设定的样式呈现出来
实现Adapter相关接口的类是BaseAdapter
子类是:ArrayAdapter 默认情况下只能显示文本
,SimpleAdapter 显示列相对复杂的列表,要求所有的列表项结构相同,显示样式相同,
CursorAdapter
ListView列表控件
activity-man.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"
tools:context=".MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:listSelector="#A9A9A9">
</ListView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/iv"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_margin="5dp"
android:background="@drawable/b"
android:scaleType="centerCrop"/>
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/iv"
android:layout_toRightOf="@+id/iv"
android:text="植物名称"
android:textSize="18sp"
android:textStyle="bold"/>
<TextView
android:id="@+id/tv_depict"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_title"
android:layout_marginTop="10dp"
android:layout_toRightOf="@+id/iv"
android:text="植物的描述"
android:textSize="16sp"/>
</RelativeLayout>
layout布局列表文件
java:
package com.example.listview;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.BadParcelableException;
import android.os.Bundle;
import android.text.AlteredCharSequence;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private ListView mListView;
private int[] icons={R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e,R.drawable.f};
private String[] titles={"白娟梅","五色椒","小檗","李叶绣线菊","多花兰","樟耳细辛"};
private String[] depicts={"白娟梅又名茧子花、金花果,是蔷薇棵白娟梅属灌木",
"五色椒又名朝天椒,五彩辣椒,为辣椒 变种,味涩",
"小檗春日黄花簇簇,秋日红果满枝","蔷薇科,绣线菊属灌木","高可达3米","多花兰是兰科兰属的一种附生植物","植物樟耳细辛,分布于我国辽宁,安徽,浙江,河南"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView =(ListView)findViewById(R.id.listView);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String content="植物名称"+titles[position]+"描述"+depicts[position];
Toast.makeText(MainActivity.this,content,Toast.LENGTH_LONG).show();
}
});
// 长按事件
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
AlertDialog alertDialog =new AlertDialog.Builder(MainActivity.this).setMessage("确定要删除吗")
.setPositiveButton("确定",null)
.setNegativeButton("取消",null)
.create();
alertDialog.show();
return true;
}
});
MyBaseAdapter myBaseAdapter=new MyBaseAdapter();
mListView.setAdapter(myBaseAdapter);
}
private class MyBaseAdapter extends BaseAdapter{
@Override
public int getCount() {
return titles.length;
}
@Override
public Object getItem(int position) {
return titles[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null) {
convertView =View.inflate(MainActivity.this,R.layout.list_item,null);
viewHolder =new ViewHolder();
TextView title = (TextView) convertView.findViewById(R.id.tv_title);
TextView depict = (TextView) convertView.findViewById(R.id.tv_depict);
ImageView image = (ImageView) convertView.findViewById(R.id.iv);
image.setBackgroundResource(icons[position]);
depict.setText(titles[position]);
depict.setText(depicts[position]);
convertView.setTag(viewHolder);
}
else {
viewHolder=(ViewHolder)convertView.getTag();
}
return convertView;
}
}
public class ViewHolder{
TextView tv_title;
TextView tv_depict;
TextView image;
}
}
运行结果如图