1.简单entryies属性的ListView
主界面增加按钮
string中增加一个字符串
<string name="btnListStu">ListViewStudent</string>
布局中加入测试按钮
<Button
android:id="@+id/btnListView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btnListStu"
android:textSize="@dimen/mainFontSize"/>
创建Activity
public class ListStudentActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_student);
}
}
创建listview展示布局界面
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
//都是Match_partent不用定位
MainActivity中增加按钮跳转
Button btnListView;//定义按钮
btnListView=findViewById(R.id.btnListView);//绑定
btnListView.setOnClickListener(this);//设置匿名类,直接实现接口的方法
//执行监听器
@Override
public void onClick(View view) {
int id = view.getId();
switch (id){
case R.id.btnListView:
Intent intent=new Intent((MainActivity.this,ListStudentActivity.class));
startActivity(intent); //跳转页面
break;
}
}
给ListView设置entries属性、运行安装app
界面展示如下
对ListView的每一项绑定点击事件,点击选项输出定位
public class ListStudentActivity extends AppCompatActivity {
ListView listView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_student);
listView=findViewById(R.id.listview);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
Log.d("test", "onItemClick: "+pos);
}
});
}
}
2.SimpleAdapter适配器的ListView
删掉xml中的entries属性
SimpleAdapter adapter =new SimpleAdapter(this,data,R.layout.stu_item_layout,froKey,toID);
五个参数,
第二个是数据源,第三个ListView一行的布局文件
第四个是数据源中数据项名,第五个是数据项名对应布局中的哪个id
listView.setAdapter(adapter);
手动模拟一个数据源
ArrayList<HashMap<String,String>> data; List中是哈希map,HashMap中是Key,value
模拟从数据库中获取50条数据
private ArrayList<HashMap<String,String>> getData(){
ArrayList<HashMap<String,String>> list =new ArrayList<>();
for (int i=0;i<50;i++)
{
HashMap<String,String> map=new HashMap<>();
map.put("xm","xxxxm"+i);
map.put("dh","xxxxm"+i);
map.put("dz","xxxxm"+i);
map.put("xm","xxxxm"+i);
list.add(map);
}
return list;
}
根据参数写一个Adapter的布局文件,展示在Listview
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:id="@+id/item_xm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
/>
<TextView
android:id="@+id/item_dh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
/>
<TextView
android:id="@+id/item_addr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/item_xm"
app:layout_constraintLeft_toLeftOf="@id/item_xm"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
获取数据,设置formkey,toid两个参数
data =getData();
表示从hash中获取的属性
String[] froKey=new String[]{"xm","dh","dz"};
表示要给适配器布局中哪几个对象赋值
int [] toID=new int[]{R.id.item_xm,R.id.item_dh,R.id.item_addr};
一定要对应,否则会乱
使用Adapter适配器
SimpleAdapter adapter =new SimpleAdapter(this,data,R.layout.stu_item_layout,froKey,toID);
五个参数,
第二个是数据源,第三个ListView一行的布局文件
第四个是数据源中数据项名,第五个是数据项名对应布局中的哪个id
listView.setAdapter(adapter);
检验效果
最后对于点击,将数据在后台接受的方法是通过id获得
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
Log.d("test", "onItemClick: "+pos);
HashMap<String,String> map=data.get(pos); 创建一个map对象,由下标接受对象
map.get("xm"); 取得map中的属性
}
总结:Listview是一个显示框架,显示什么由Adapter决定