一、关于ListView和Adapter
·ListView控件,用于展示拥有一列相同部分的视图。
·该视图的具体内容需要使用适配器进行指定。定义的适配器类需要继承BaseAdapter并实现它的四个方法:
1、public int getCount() //得到item条目的总数。他返回多少,视图就展示多少条。
2、public Object getItem(int postion) //根据postion(位置)的到某个item
3、public long getItemId(int postion) //根据postion得到某个item的id
4、public View getView(int postion,View convertView,ViewGroup parent) //得到相应postion对应的item视图,convertView用于复用旧视图,parent用于加载xml布局
*注:
- BaseAdapter:抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter!
- ArrayAdapter:BaseAdapter的子类,支持泛型操作,最简单的一个Adapter,只能展现一行文字~
- SimpleAdapter:BaseAdapter的子类,同样具有良好扩展性的一个Adapter,可以自定义多种效果!
SimpleCursorAdapter:BaseAdapter的子类,用于显示简单文本类型的listView,一般在数据库那里会用到,不过有点过时, 不推荐使用!
二、使用ListView和Adapter,实现应用商店页面
流程如下:
0、准备好我们需要的图片,放到drawable或mipmap目录下。(我放到了mipmap目录下)
1、编写一个简单的包含ListView的主页面
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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/myListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:divider="#d9d9d9"
android:dividerHeight="1dp"
></ListView>
</android.support.constraint.ConstraintLayout>
2、编写自定义的item布局
<?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="match_parent"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/item_image"
android:layout_width="48dp"
android:layout_margin="8dp"
android:background="@mipmap/doudizhu"
android:layout_height="48dp" />
<TextView
android:id="@+id/item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="超级好玩的游戏"
android:textSize="18sp"/>
</LinearLayout>
3、在activity中使用Adapter,给ListView的Item进行指定内容。
package cn.edu.sjzc;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private ListView listView;
//定义适配器需要的数据
private String[] name = {"不欢乐斗地主","赔钱打麻将"};//名字
private int[] images = {R.mipmap.doudizhu,R.mipmap.majiang};//图片
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.myListView);
//使用适配器
MyAdapter myAdapter = new MyAdapter();
listView.setAdapter(myAdapter);//设置我们的adapter
}
//创建适配器类,继承BaseAdapter
class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return name.length;//确定显示多少条item
}
@Override
public Object getItem(int position) {
return name[position];
}
@Override
public long getItemId(int position) {
return position;
}
//得到itemview 的视图
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//使用View.inflate()方法,将一个布局转换成一个view对象
View view = View.inflate(MainActivity.this, R.layout.list_item, null);//参数2:要转换的布局
ImageView item_image = view.findViewById(R.id.item_image);
TextView item_text = view.findViewById(R.id.item_text);
//设置图片和内容
item_image.setBackgroundResource(images[position]);
item_text.setText(name[position]);//postion从0开始
return view;
}
}
}
4、运行测试: