ListView
ListView常用XML属性和说明:
android:choiceMode
设置ListView的选择行为
android:divider
设置List列表项的分割条
android:dividerHeight
设置分割条的高度
android:entries
指定一个数组资源,android将根据该数组资源生成ListView
android:footerDividersEnabled
如果设置为false,则不在footerView之前绘制分割条。
android:headerDividersEnabled
如果设置为false,则不在headerView之后绘制分割条。
创建一个ListView
方法1:示例代码
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:entries="@array/Stars"
android:divider="#f00"//指定分割线颜色
android:divider="1px"//分割线高度
android:scrollbar="none"//隐藏滚动条
android:overScrollMode="never"//取消滑动过头提醒
/>
在Values文件夹下创建arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="Stars">
<item>Joe</item>
<item>Martin</item>
<item>Kobe</item>
<item>James</item>
<item>oven</item>
<item>Joe2</item>
<item>Martin3</item>
<item>Kobe4</item>
<item>James5</item>
<item>oven6</item>
</string-array>
</resources>
方法二:用java代码创建ListView
示例代码:
public class MainActivity extends AppCompatActivity {
String[] strings = {"Joe","Kobe","curry","James","harde","Martin"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView) findViewById(R.id.demoListView);
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, text1,strings);
listView.setAdapter(adapter1);
}
}
ListView SimpleAdapter:简单适配器
通过simpleAdapter 我们很容易实现在ListView的每一项布局里面实现多个TextView,并且显示一些额外的UI控件,比如图片。。。
构造方法:
SimpleAdapter(Context context,List<? extends Map<String,?>> data, int resource,String[] from, int[] to)
context:上下文
data:数据源,是一个Map对象列表
resource:每一项的布局资源ID
from :在Map对象中存储的Key
to:每一项布局资源中需要显示文本的TextView的ID数组。
示例代码:
java代码
public class MainActivity extends AppCompatActivity {
// String[] strings = {"Joe","Kobe","curry","James","harde","Martin"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView) findViewById(R.id.demoListView);
//
// ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, text1,strings);
// listView.setAdapter(adapter1);
List<Map<String ,?>> dataList = new ArrayList<>();
for (int i = 0;i < 50; i++){
Map<String,String> map = new HashMap<>();
map.put("name","张三"+ i);
map.put("sex",i%2==0?"男":"女");
map.put("age",10+i +"");
dataList.add(map);
}
String[] from ={"name","age","sex"};
int[] to = {R.id.TV_name,R.id.TV_age,R.id.TV_sex};
SimpleAdapter simpleAdapter = new SimpleAdapter(this,dataList,R.layout.item_user_ifo,from,to);
listView.setAdapter(simpleAdapter);
对应的XML文件: item_user_ifo.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:src="@drawable/home"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/TV_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/TV_age"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/TV_sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
simpleAdapte
弊端:不能根据我们的逻辑给其他的非TextView的控件设置它所想要的显示逻辑。对于复杂的ListView列表,建议使用BaseAdapte定义我们逻辑需要的适配器。
ListView BaseAdapter:简单适配器
baseadapter是一个抽象类
我们可以通过继承baseadapter实现它的抽象方法,来定义我们的adapter.
代码示例:
public class BaseAdaptertest extends Activity{
List<String> dataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.baseadapter);
ListView listView = (ListView) findViewById(R.id.baseadapter_list);
dataList = new ArrayList<>();
for (int i = 0; i<50;i++){
dataList.add("Joe"+1);
}
UserInforListadapter userInforListadapter = new UserInforListadapter();
listView.setAdapter(userInforListadapter);
}
class UserInforListadapter extends BaseAdapter{
@Override
public int getCount() {
return dataList.size();
}
@Override
public Object getItem(int position) {
return dataList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemRootView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user_ifo,null);
TextView tvName = (TextView) itemRootView.findViewById(R.id.TV_name);
tvName.setText(dataList.get(position));
return itemRootView ;
}
}
}