您的位置:首页 > 移动开发 > Android开发

安卓初学四之控件初步(三)

2016-03-05 21:54 435 查看

(六)ListView列表控件

ListView是用来表示列表的控件,使用时需要和适配器一起使用。

(1)ListView

<ListView
android:id="@+id/listView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" >
</ListView>

(2)适配器

把复杂的数据填充在制定视图界面上。本次学习了两个适配器
i)ArrayAdapter  绑定格式单一的数据,数据源可以使集合或者数组
ii)SimpleAdapter  绑定复杂的数据,数据源:只鞥是特定泛型的集合

(3)使用ArrayAdapter

package com.example.listviewdemo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity implements OnItemClickListener,OnScrollListener {
private ListView lv;
//private ArrayAdapter<String> arr;
private SimpleAdapter sim_adapter;
private List<Map<String,Object>>dataList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

/**数组适配器,用于纯文字的ListView
* ArrayAdapter(上下文,列表用的布局文件,数据源)
*/
//1.新建一个数组适配器
lv=(ListView) findViewById(R.id.listView1);
String []str={"第一个","第二个","第三个","第四个","第五个"};//手动建立一个数据源
<span style="white-space:pre"></span><pre name="code" class="java"><span style="white-space:pre">		</span>//2.适配器加载数据源
arr=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,str);

<span style="white-space:pre">		</span>//3.试图加载适配器
lv.setAdapter(arr);
<span style="white-space:pre"></span>
<span style="white-space:pre">		</span>}
}

(4)使用SimpleAdapter

package com.example.listviewdemo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity implements OnItemClickListener,OnScrollListener {
private ListView lv;
private SimpleAdapter sim_adapter;
private List<Map<String,Object>>dataList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

/**
* SimpleAdapter(context, data, resource, from, to)
* context:上下文
* data:数据源(List<? extends Map<String ,?>> data)一个Map所组成的List集合
* 		每一个Map都会去对应ListView列表中的一行
* 		 每一个Map(键—值对)中的键必须包含所有在from中所指定的键
* resource:列表的布局文件ID
* from:Map中的键名
* to:绑定数据视图中的ID,与from城对应关系
*/
dataList=new ArrayList<Map<String,Object>>();
lv=(ListView) findViewById(R.id.listView1);
sim_adapter=new SimpleAdapter(MainActivity.this, getData(), R.layout.item, new String[]{"pic","text"}, new int[]{R.id.pic,R.id.text});
lv.setAdapter(sim_adapter);
lv.setOnItemClickListener(this);
lv.setOnScrollListener(this);
}

private List<Map<String,Object>>getData(){
for(int i=0;i<20;i++){
Map<String,Object> map=new HashMap<String,Object>();
map.put("pic", R.drawable.ic_launcher);
map.put("text", "适配器"+i);
dataList.add(map);
}
return dataList;
}
}

列表的布局文件的XML代码
<?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/pic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:src="@drawable/ic_launcher"
/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="demo"
android:textColor="#FF0000"
/>
</LinearLayout>
<span style="white-space:pre">	</span><img src="https://img-blog.csdn.net/20160305223954075?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="图片" />

(4)ListView的三个函数

@Override
public void onScroll(AbsListView view, int firstVisibleItem,   int visibleItemCount, int totalItemCount) {
/**
* firstVisibleItem 表示在当前屏幕显示的第一个listItem在整个listView里面的位置(下标从0开始)
* visibleItemCount表示在现时屏幕可以见到的ListItem(部分显示的ListItem也算)总数
* totalItemCount表示ListView的ListItem总数
* listView.getLastVisiblePosition()表示在现时屏幕最后一个ListItem
* (最后ListItem要完全显示出来才算)在整个ListView的位置(下标从0开始)
*/

}

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
switch(scrollState){
case SCROLL_STATE_FLING:
Log.i("main", "用户手指离开屏幕之前用力划了一下,试图人在因惯性华滑动");
Map<String,Object> map=new HashMap<String,Object>();
map.put("pic", R.drawable.ic_launcher);
map.put("text", "正在刷新");
dataList.add(map);
sim_adapter.notifyDataSetChanged();//刷新一下UI线程,让改变的东西出现
break;
case SCROLL_STATE_IDLE:
Log.i("mian", "视图已经停止滑动了");
break;
case SCROLL_STATE_TOUCH_SCROLL:
Log.i("main", "手指没有离开屏幕,视图正在滑动");
break;
}
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long arg3) {
// TODO Auto-generated method stub
String str=lv.getItemAtPosition(position)+"";
Toast.makeText(this, "position="+position+" text="+str, Toast.LENGTH_SHORT).show();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android listview