1.ListView基础代码
<ListView
android:id="@+id/lv_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView) findViewById(R.id.lv_list);
listView.setAdapter(new MyAdapter());
}
public class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return 5;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = new TextView(MainActivity.this);
textView.setText("第" + position + "个TextView");
return textView;
}
}
}
2.ListView的优化
1:代码的优化,在上述ListView基础代码中,当屏幕进行翻滚时,会回收翻上去的TextView,并且创建新的TextView,这样消耗内存。我们可以对其进行优化,让其在内存中只有屏幕所显示的数量的TextView对象,上下翻滚只是对这些对象进行重新的使用。
2:布局页面的优化。
<ListView
android:id="@+id/lv_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
ListView标签的layout_width、layout_height应该使用match_parent或者传入一个具体的值,这样就不需要进行多次的计算,多次的调用getView方法。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = null;
if(convertView == null){
textView = new TextView(MainActivity.this);
}else {
textView = (TextView) convertView;
}
textView.setText("第" + position + "个TextView");
return textView;
}
3.ListView复杂布局
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if(convertView == null){
view = View.inflate(MainActivity.this, R.layout.item, null);
}else {
view = convertView;
}
return view;
}
4.通过LayoutInflater将布局文件转化为对象的三种方式
public void getView1(int position, View convertView, ViewGroup parent){
LayoutInflater from = LayoutInflater.from(MainActivity.this);
LayoutInflater layoutInflater = getLayoutInflater();
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
}
5.ArrayAdapter
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView) findViewById(R.id.lv_list);
String[] objects = {"张三","lisi","wangwu","zhaoliu","fengti"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item1, objects);
adapter = new ArrayAdapter<String>(this, R.layout.item2, R.id.tv_text, objects);
listView.setAdapter(adapter);
}
6.SimpleAdapter
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView) findViewById(R.id.lv_view);
List<Map<String, String>> data = new ArrayList<Map<String, String>>();
Map<String,String> map1 = new HashMap<String, String>();
map1.put("title", "1111111111");
map1.put("content", "1111111111111");
data.add(map1);
Map<String,String> map2 = new HashMap<String, String>();
map2.put("title", "2222222222");
map2.put("content", "2222222222222");
data.add(map2);
String[] from = {"title","content"};
int[] to = {R.id.tv_title,R.id.tv_content};
SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, R.layout.item, from, to);
listView.setAdapter(simpleAdapter);
}
7.ListView从数据库获取数据
public class MainActivity extends Activity {
private MyOperHelper myOperHelper;
private List<Info> list = new ArrayList<Info>();
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.lv_view);
myOperHelper = new MyOperHelper(this);
}
public void insert(View v){
SQLiteDatabase database = myOperHelper.getReadableDatabase();
database.execSQL("insert into info(name,phone) values('王五','13777777')");
database.execSQL("insert into info(name,phone) values('zhaoliu','111111')");
database.execSQL("insert into info(name,phone) values('tianqi','122222')");
database.close();
}
public void query(View v){
SQLiteDatabase database = myOperHelper.getReadableDatabase();
Cursor cursor = database.rawQuery("select * from info", null);
while(cursor.moveToNext()){
Info info = new Info();
info.name = cursor.getString(1);
info.phone = cursor.getString(2);
list.add(info);
}
for(Info info : list){
System.out.println(info);
}
listView.setAdapter(new MyAdapter());
}
public class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if(convertView == null){
view = View.inflate(MainActivity.this, R.layout.item, null);
}else {
view = convertView;
}
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
TextView tv_phone = (TextView) view.findViewById(R.id.tb_phone);
tv_name.setText(list.get(position).name);
tv_phone.setText(list.get(position).phone);
return view;
}
}
}