android学习,listview

Android (25) 2024-02-28 15:12

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 );
            }
        });

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

发表回复