第66篇 Android Studio一篇文章简单理解ListView和适配器
1.思维导图
我看我写的文章,阅读量最高的是适配器和ListView的运用,因为这也是开发app的重要所在,所以就再写这一篇文章,也希望能加深自己的理解。
从这张图中得到的信息是,我们除了在主界面布局中添加ListView外,还要添加ListView这个列表要显示内容的布局,比如我们显示的是一张图片和一行文字,就在布局中添加一个ImageView和TextView,反正就是添加相应的控件。
第二就是重写一个类MyAdapter,继承自BaseAdapter类,这个是来进行适配的。
数据类的话如果想要显示的信息很多(三个以上吧),建议写一个,不然你的适配器里变量肯定要多了。
好了,下面逐步讲解。
2.主界面布局
新建项目打开之后,把原有的布局改成线性布局,其他的都不需要该,然后添加ListView,注意为ListView添加id。
3.添加适配界面布局
找到res下的layout
右键点击,选择New,点击Layout Resource File
点击之后填写文件名称,点击ok
打开之后就布局,这样就可以用了。
但是布完局什么都没有,感觉很不爽,所以我们添加一些信息。
添加图片
从电脑里复制一张图片,右键drawable,点击Paste
有时候它会出现一个改名字的界面,但有时候没有,只要你的图像名称规范就行
不过可以添加进去,再改名,右键图片,
点击Rename
可以了。
添加文本数据
在strings.xml文件添加就好,然后在list_layout文件添加显示。
有信息了,但是不是我们想要的,所以我们要调整比例。
好了,这个界面好了。然后添加数据类
然后添加适配器类,首先是变量,和构造函数
然后是三个重写的函数
最后是最主要的函数
ok,适配器完了,剩下的就是主活动了。
这样就行了。
运行结果
myData.add(new Data(R.drawable.my_image_list,"listview的文本内容" + (i + 1)));
完了。
4.文件代码
4.1.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
tools:context=".MainActivity">
<ListView
android:id="@+id/listView_information"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
4.2.list_layout.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="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/image_list"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:src="@drawable/my_image_list"/>
<TextView
android:id="@+id/txt_list"
android:layout_width="0dp"
android:gravity="center"
android:layout_height="wrap_content"
android:layout_weight="7"
android:text="@string/txt_information"/>
</LinearLayout>
4.3.Data.java
package com.example.listviewadapter;
public class Data {
private int imageId;
private String text;
public Data() {
}
public Data(int imageId, String text) {
this.imageId = imageId;
this.text = text;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
4.4.MyAdapter.java
package com.example.listviewadapter;
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 java.util.LinkedList;
public class MyAdapter extends BaseAdapter {
private Context mContext;
private LinkedList<Data> myData;
public MyAdapter() {}
public MyAdapter(LinkedList<Data> myData, Context mContext) {
this.myData = myData;
this.mContext = mContext;
}
@Override
public int getCount() {
return myData.size();
}
@Override
public Object getItem(int position) {
return myData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_layout,parent,false);
}
ImageView imageView = convertView.findViewById(R.id.image_list);
TextView textView = convertView.findViewById(R.id.txt_list);
imageView.setImageResource(myData.get(position).getImageId());
textView.setText(myData.get(position).getText());
return convertView;
}
}
4.5.strings.xml
<resources>
<string name="app_name">ListViewAdapter</string>
<string name="txt_information">列表一行的内容</string>
</resources>
4.6.MainActivity.java
package com.example.listviewadapter;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.LinkedList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinkedList<Data> myData = new LinkedList<>();
for(int i = 0;i < 50;i++){
myData.add(new Data(R.drawable.my_image_list,"listview的文本内容" + (i + 1)));
}
ListView listView = findViewById(R.id.listView_information);
listView.setAdapter(new MyAdapter(myData,this));
}
}
好了,如果粘贴代码,记得改包名。