本次来说一下ListView控件的情况:
(一)ListView 概念:
ListView是Android中最重要的组件之一,几乎每个Android应用中都会使用ListView。它以垂直列表的方式列出所需的列表项。
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.AdapterView
↳ android.widget.AbsListView
↳ android.widget.ListView
(二)ListView的两个职责:
将数据填充到布局:
处理用户的选择点击等操作。
(三)列表的显示需要三个元素:
1.ListVeiw:用来展示列表的View;
2.适配器:用来把数据映射到ListView上的中介;
3.数据源:具体的将被映射的字符串,图片,或者基本组件。
(四)什么是适配器?
适配器是一个连接数据和AdapterView的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。将数据源的数据适配到ListView中的常用适配器有:ArrayAdapter、SimpleAdapter和SimpleCursorAdapter。
ArrayAdapter最为简单,只能展示一行字;
SimpleAdapter有最好的扩充性,可以自定义各种各样的布局,除了文本外,还可以放ImageView(图片)、Button(按钮)、CheckBox(复选框)等等;
BaseAdapter通用数据适配器,可以自定义自己想要的风格,常见的用于比如手机淘宝,美团那种商品界面等;
ArrayAdapter简单实现代码:
package com.xshark.hello.juno6;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<String> list = null;
private static int i;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init_data();
// // 系统预置Item风格
// final ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.simple_expandable_list_item_1, list);
// 自定义item风格
final ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, R.layout.item, list);
ListView lv1 = (ListView) findViewById(R.id.lv1);
lv1.setAdapter(adapter);
Button button = (Button) findViewById(R.id.btn_1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.add("Button item " + i++);
if(i < 10000) {
adapter.notifyDataSetChanged();
} else {
i = 0;
}
}
} );
}
private void init_data() {
list = new ArrayList<String>();
for (int i = 0; i < 3; i++) {
list.add("item " + i);
}
}
}
BaseAdapter示例程序:
Good.java
package com.xshark.hello.juno7;
public class Good {
private int imgId = 0;
private String name = null;
private int price = 0;
private int count = 0;
public Good(int imgId, String name, int price) {
this.imgId = imgId;
this.name = name;
this.price = price;
this.count = 0;
}
public int getImgId() {
return imgId;
}
public void setImgId(int imgId) {
this.imgId = imgId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
LayoutActivity.java
package com.xshark.hello.juno7;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class LayoutActivity extends AppCompatActivity {
private List<Good> goods = new ArrayList<Good>();
private GoodAdapter adapter3 = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout);
initData3();
adapter3 = new GoodAdapter();
ListView lv3 = (ListView) findViewById(R.id.listview3);
lv3.setAdapter(adapter3);
}
private void initData3() {
Good good1 = new Good(R.mipmap.tulips, "衬衫", 100);
Good good2 = new Good(R.mipmap.lighthouse, "鞋子", 130);
Good good3 = new Good(R.mipmap.penguins, "包包", 200);
goods.add(good1);
goods.add(good2);
goods.add(good3);
}
private class GoodAdapter extends BaseAdapter {
private TextView tv_co