ListView学习笔记

1.ListView是ViewGroup的子类,本质上面是列表项的容器,并且显示出来,大致效果如下图所示:
ListView的效果

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>

效果图:

 
 

 

转载于:https://www.cnblogs.com/MitchZhang/p/4642608.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值