大家好我是Miko,今天给大家讲解一下ListView的基本使用,包括Layout的编写,BaseAdapter以及如何实现触摸响应
入门简介,大神勿喷=-=
- layout布局
- BaseAdaper的编写
- 触摸响应
- MainActivity
一、layout布局
在layout中我们要编写主界面的布局,除此之外我们还要有一个Item,代表每行的布局
首先是main_activity
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.miko.zd.listviewtest.MainActivity">
<ListView
android:id="@+id/lv_main"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</RelativeLayout>
然后是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:orientation="horizontal">
<TextView
android:id="@+id/tv_key"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="50dp"
android:gravity="center"/>
<TextView
android:id="@+id/tv_value"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="50dp"
android:gravity="center"/>
</LinearLayout>
ok很简单这样我们的布局就完成了
二、Adapter的实现 & 三、触摸listener的编写
ListView要与List<>数据绑定必须要有一个Adapter,Adapter的种类有很多,这里只是解释最基本的一种,baseAdapter
public class MyAdapter extends BaseAdapter {
Context context;
ArrayList<HashMap<String, Object>> arrayList;
TextView textkey;
TextView textvalue;
MyAdapter(Context context,ArrayList<HashMap<String, Object>> arrayList)
{
this.context=context;
this.arrayList = arrayList;
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int position) {
return arrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView=View.inflate(context,R.layout.list_item,null);
textkey= (TextView) convertView.findViewById(R.id.tv_key);
textvalue= (TextView) convertView.findViewById(R.id.tv_value);
textkey.setText(arrayList.get(position).get("key").toString());
textvalue.setText(arrayList.get(position).get("value").toString());
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,arrayList.get(position).get("value").toString(),Toast.LENGTH_LONG).show();
}
});
return convertView;
}
}
我们创建一个类继承于BaseAdapter,必须要引用其中的一些方法
@Override
public int getCount() {
return arrayList.size();
}
这个函数返回list的大小,也就是数组的长度
@Override
public Object getItem(int position) {
return arrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
这两个方法可实现也可直接返回空
最重要的就是下面的方法
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView=View.inflate(context,R.layout.list_item,null);
textkey= (TextView) convertView.findViewById(R.id.tv_key);
textvalue= (TextView) convertView.findViewById(R.id.tv_value);
textkey.setText(arrayList.get(position).get("key").toString());
textvalue.setText(arrayList.get(position).get("value").toString());
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,arrayList.get(position).get("value").toString(),Toast.LENGTH_LONG).show();
}
});
return convertView;
}
convertView=View.inflate(context,R.layout.list_item,null); 这一句用来找到list_item
找到之后我们才能findviewbyId
四、MainActivity
private void initData() {
list = new ArrayList<>();
for (int i = 0; i < 30; i++) {
HashMap<String, Object> hashmap = new HashMap<>();
hashmap.put("key","第"+i+"行: ");
hashmap.put("value"," "+(char)('a'+i));
list.add(hashmap);
}
}
private void initEvent() {
}
private void intiView() {
listView = (ListView) findViewById(R.id.lv_main);
myAdapter = new MyAdapter(this, list);
listView.setAdapter(myAdapter);
}