Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说android学习,listview,希望能够帮助你!!!。
listview使用,多的不管,只要知道,
1、在Activity_main里,要有这个控件。
2、创建一个listview里的listitem界面,
3、创建一个BaseAdapter类来适配listitem界面并传导数据,执行相应操作。
第一步,在Activity_main里添加listview组件。
<ListView
android:id="@+id/list_view"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
第二步,创建一个item界面,并在里面创建一个TextView来显示我们要的数据。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<TextView
android:id="@+id/fruit_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
第三步,创建一个继承于BaseAdapter类的Adpter类,并重写里面需要的4个方法。
public class MyAdpter extends BaseAdapter {
private List<Fruit> data;//下面有这个类,这是设立一个Fruit类的集合,
private Context context;//当前上下文。
public MyAdpter(List<Fruit> data, Context context) {//Adpter类的构造函数
this.data = data;
this.context = context;
}
@Override//系统自动创建
public int getCount() {
return data.size();//返回数据集的数量
}
@Override//系统自动创建
public Object getItem(int position) {
return data[position];
}
@Override//系统自动创建
public long getItemId(int position) {
return position;
}
@Override//系统自动创建
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;//一个内部类,用来存放Textview对象。
if(convertView==null){//如果为null,说明这个listitem对象没有被创建,那就创建 这个view对象。
vh=new ViewHolder();
//这里就得到了一个listitem的界面
convertView=LayoutInflater.from(context).inflate(R.layout.fruit_item,parent,false);
//得到这个listitem界面里的textview对象
vh.textView=convertView.findViewById(R.id.fruit_name);
convertView.setTag(vh);//把这个内部类对象存到listitem这个界面中去
} else{//如果已经创建了一个listitem的Layout界面的话,就只直接从取出内部类对象
vh=(ViewHolder) convertView.getTag();
}
vh.textView.setText(data.get(position).getName());//设置listitem里的TextView的值
Log.e("hehe", "getView: "+position );//这个是打印测试
return convertView;
}
private final class ViewHolder{//内部类
TextView textView;
}
}
public class Fruit {//实体类,里面可以添加别的参数,比如weight/color之类的
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
第四步,在MainActivity里进行操作。
//本来这个数据可能是来自外部,现在这里用for循环创造10个。
for(int i=0;i<10;i++){
Fruit fruit=new Fruit();
fruit.setName("水果"+i);
data.add(fruit);//把数据放到集合里
}
ListView listView = findViewById(R.id.list_view);//这个是得到了主界面里的ListView控件。
listView.setAdapter(new MyAdpter(data,this));//把控件传到新建的Adpter对象中
//给这个对象集加一个点击监听
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("hehe", "onItemClick: "+position );
}
});
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。