黑马程序员技术交流社区
标题:
关于安卓的ListView 以及适配器
[打印本页]
作者:
冯超
时间:
2014-3-19 19:29
标题:
关于安卓的ListView 以及适配器
这个学期开始认真的学期的安卓,最早接触安卓是在去年暑假的那个时候,半夜熬夜做了个很小的东西,计算器和打电话,发短信的软件。奈何这个暑假也快到来,时间也不多了。
说下ListView吧!
private ListView listView;
private TextView textView;
String[] items = {"111","111","111","111","111","111","111","111","111","222","111","111","111","111","55555"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取listview
listView = (ListView) findViewById(R.id.listview1);
listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, items));
// 设置监听事件
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "选择了" + "--" + arg2, 1).show();
}
});
}
复制代码
基本的,这段代码就足够了。
第一步:实例化 listView
第二部:定义适配器
第三部:listView.setAdapter.
这个是简单的。
在来说个复杂的。
有一个布局歌曲xml文件:
这个布局有三个控件(多少个控件没有关系)
有一个主界面,里面有个ListView控件。
目的则是:需要这个listView中的每一行都是那个xml布局。
如何做到呢?
关键还是适配器,介绍个SimpleAdapter adapter = new SimpleAdapter(this, listDate,R.layout.activity_diarys_list, from, to); 简单适配器。
listDate是一个List<Map<String, ?>>集合
from是一个字符串数组 String[] from = {}; 里面的元素对应listDate集合中的key
to也是一个字符串数组String[] to = {}; 里面的元素对了布局xml控件中的id(R.id.xx)
其他的方式都是一样也都一样。
说道适配器,当然可以自定义:
package com.example.myadapterdesign;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView listView;
private Myadapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView1);
myAdapter = new Myadapter(getSources());
//Adapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getSources());
listView.setAdapter(myAdapter);
}
@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;
}
public List<String> getSources() {
List<String> list = new ArrayList<String>();
for(int i = 0; i < 50; i++) {
list.add("zhangsssssss" + i);
}
return list;
}
class Myadapter extends BaseAdapter {
List<String> list;
public Myadapter(List<String> list){
this.list = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view;
if(convertView == null) {
view = LayoutInflater.from(MainActivity.this).
inflate(R.layout.item, null);
} else {
view = convertView;
}
TextView textView = (TextView) view.findViewById(R.id.textView1);
textView.setText(list.get(position));
return view;
}
}
}
复制代码
各位怕麻烦就用系统给的常用适配器(麻烦就是数据得按照官方给的数据形式,什么json,xml,数组感觉都是一样的只是形式),不麻烦就自己定义适配器,但是不管什么方式,都要用自己喜欢的方式,毕竟都是工具,能得心应手的使用才是王道!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2