ListView学习笔记
1.ListView是ViewGroup的子类,本质上面是列表项的容器,并且显示出来,大致效果如下图所示:
2.了解了大致的效果,那么我们在意的就是让listview显示我们想要的数据了,给listview 添加数据的一些常用的方法如下:
----------------------->在布局中定义listview的时候,我们可以给他指定android:entries属性,指定一个数组来显示listview,代码如下:
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#00f"
android:dividerHeight="2px"
android:entries="@array/test"
android:footerDividersEnabled="true"
/>
其中:android:divider表示分割线的颜色
android:Height 表示分割线的宽度.a
ndroid:footerDividersEnabled="true" 表示在最后一个列表项后面加分割线
当然这样我们就得在values文件夹下面创建一个数组的资源文件了,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="test">
<item>数组测试1</item>
<item>数组测试2</item>
<item>数组测试3</item>
<item>数组测试4</item>
</string-array>
</resources>
效果图:
----------------------->使用ArrayAdapter给ListView提供数据
String [] arr = {"测试1","测试2","测试3"};
ArrayAdapter<String> mArrayAdapter = new ArrayAdapter<String> (this,R.layout.adaper_test,arr);
mListView.setAdapter(mArrayAdapter);
ArrayAdapter的第二个参数将作为列表项的显示组件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/testview_1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textColor="#f00"
/> 效果——>
第三个参数作为列表项显示的数据内容.
上面二种方法显示的都是比较单一的内容,如果要显示较为复杂的内容就要用到 SimpleAdapter 和 BaseAdapter了.
----------------------->使用SimpleAdapter提供数据
首先看看他的构造函数:SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to);
第一个参数:上下文对象
第二个参数:一个List容器,内容都是map,里面的每一个值都是一个列表项.
第三个参数:一个界面布局的id,该布局是每一个列表项的布局.
第四个参数:指定Map中的,key对应的value,来生成列表项。
第五个参数: 资源id组成的数组,在第四个参数中指定了什么,这里就要填什么,而且顺序要和第四个参数一致.
测试例子:SimpleAdapterTest
public class SimpleAdapterTest extends Activity {
public int [] imageIds = new int [] {
R.drawable.angrybirds,
R.drawable.captainamerica,
R.drawable.minion,
R.drawable.watermelon
};
public String [] names = new String [] {
"愤怒的小鸟","美国队长的盾牌","小黄人","西瓜"
};
public String [] dsc = new String []{
"愤怒的小鸟是一个好玩的手机游戏",
"这是复仇者联盟里面的美国队长的盾牌",
"小黄人,这个不知道",
"我最喜欢吃的西瓜"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simpleadaptertest);
ListView mListView = (ListView) findViewById(R.id.simple_adpter_listview);
//为列表项提供内容arraylist
List<Map<String,Object>> arrayList = new ArrayList<Map<String,Object>>();
for(int i =0;i<names.length;i++)
{
Map<String,Object> hashMap = new<String,Object>HashMap();
hashMap.put("name", names[i]);
hashMap.put("image", imageIds[i]);
hashMap.put("dsc", dsc[i]);
arrayList.add(hashMap);
}
//这里要注意的仅仅是几个参数运用,注意第4和第5个参数,对应的顺序要一样,不然会出错
SimpleAdapter mSimpleAdapter = new SimpleAdapter(this, arrayList, R.layout.simple_adapter_layout, new String [] {"image","name","dsc"},
new int[]{R.id.img,R.id.name,R.id.dsc});
mListView.setAdapter(mSimpleAdapter);
}
}
对应的 listview 布局如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/img"
android:layout_height="200dp"
android:layout_width="200dp"
android:paddingLeft="10dp"
android:scaleType="fitCenter"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:textColor="#f00"
android:paddingLeft="10dp"
/>
<TextView
android:id="@+id/dsc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14dp"
android:paddingLeft="10dp"
/>
</LinearLayout>
</LinearLayout>
对应的效果如下:
----------------------->使用BaseAdapter提供数据
先来看看BaseAdapter这个类里面的几个方法:
1.public int getCount() :返回ListView中显示的列表项的个数
2.public long getItemId(int position):返回值是该position处的列表项Id
3.public Object getItem(int position):返回值决定第position出的列表项的内容
4.public view getView(int position,View ContentView,ViewGroup parent):返回值决定第position处的所显示的列表项组件
代码如下:
public class BaseAdapterTest extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.baseadapter_test); ListView mlistview = (ListView) findViewById(R.id.baseadapter_list); BaseAdapter mBaseAdapter = new BaseAdapter() { @Override public View getView(int arg0, View arg1, ViewGroup arg2) { LinearLayout line = new LinearLayout(BaseAdapterTest.this); line.setOrientation(0); ImageView mImageView = new ImageView(BaseAdapterTest.this); mImageView.setImageResource(R.drawable.ic_launcher); TextView mTestView = new TextView(BaseAdapterTest.this); mTestView.setText("第"+(arg0+1)+"列表项"); mTestView.setTextColor(Color.RED); mTestView.setTextSize(20); line.addView(mImageView); line.addView(mTestView); return line; } @Override public long getItemId(int arg0) { return arg0; } @Override public Object getItem(int arg0) { return null; } @Override public int getCount() { return 20; } }; mlistview.setAdapter(mBaseAdapter); } }
界面布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/baseadapter_list" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="#f00" android:dividerHeight="2px" /> </LinearLayout>
效果图: