ListView是Android中常用的控件之一,用于数据展示。因此需要提供数据供展示,但是数据部呢个直接传递给ListView,所以需要适配器进行传递。
1、简单的ListView使用
如果展示列表中不需要展示复杂的东西,则使用ArrayAdapter适配器就可以实现。实例如下:
(1)activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/list_view1"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</ListView>
</LinearLayout>
在此布局中个ListView控件。
(2)MainActivity.java
package com.example.testviewlist;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private String[] viewListData = {"姓名:yy","微博:残缺的孤独","微信公众号:残缺的孤独","工作地:北京","感悟:要么强大,要么听话"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取ListView
ListView listView = (ListView) findViewById(R.id.list_view1);
//适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, viewListData);
//使用适配器传递数据
listView.setAdapter(adapter);
//添加点击事件
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String info = viewListData[position];
Toast.makeText(MainActivity.this, info, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
(3)结果展示
运行,见如下效果:
点击效果如下:
2、ListView之标题使用
使用SimpleAdapter适配器可以实现各种布局,扩展性好。使用SimpleAdapter时,数据一般是由HashMap组成的List,List每一行对应于ListView的一行。HashMap中的key-value数据映射到布局文件中对应的id组件上。接着上方继续修改。
(1)activity_main.xml
保持不变
(2)修改MainActivity.java
package com.example.testviewlist;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
// private String[] viewListData = {"姓名:yy","微博:残缺的孤独","微信公众号:残缺的孤独","工作地:北京","感悟:要么强大,要么听话"};
private String[] vl_title = {"姓名","微博","微信公众号","工作地","感悟"};
private String[] vl_info = {"yy","残缺的孤独","残缺的孤独","北京","要么强大,要么听话"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取ListView对象
ListView listView = (ListView) findViewById(R.id.list_view1);
List<Map<String,Object>> listData= new ArrayList<Map<String,Object>>();;
for(int i=0;i<vl_title.length;i++){
//组装Map数据
Map<String,Object> dataMap = new HashMap<String,Object>();
dataMap.put("title", vl_title[i]);
dataMap.put("info", vl_info[i]);
listData.add(dataMap);
}
//适配器
SimpleAdapter adapter = new SimpleAdapter(this,listData,android.R.layout.simple_list_item_2,
new String[]{"title","info"},new int[]{android.R.id.text1,android.R.id.text2});
listView.setAdapter(adapter);
//添加点击事件
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String title = vl_title[position];
String info = vl_info[position];
Toast.makeText(MainActivity.this, title + ": " + info, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
在使用SimpleAdapter的此构造函数中:第一个参数为上下文,第二个参数为数据,第三个参数是布局文件,第四个参数为数据项的key,第五个参数为要填充的组件。
(3)效果
效果如下图展示: