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

android学习--视图列表(ListView和ListActivity)

2016-01-10 09:48 495 查看
说明:

视图列表(ListView和ListActivity)与AutoComplete、Spinner类似,它们都须要一个供显示的列表项,能够须要借助于内容Adapter提供显示列表项

创建ListView有两种方式:

(1)直接使用ListView进行创建

(2)Activity继承ListActivity

ListView的经常使用XML属性



以下分别用两种方式创建ListView

方式一:直接使用ListView进行创建

(1) main_activity.xml

以下布局两个listView,一个基于数组,一个基于Adapter

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearlayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/language"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="30dp"/>
<ListView
android:id="@+id/listView2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:headerDividersEnabled="true"
android:footerDividersEnabled="true"
android:divider="@drawable/img02"/>

</LinearLayout>


(2) strings.xml 存放listView1内容数组

<?xml version="1.0" encoding="utf-8"?

>
<resources>

<string name="app_name">ListView</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string-array name="language">
<item>汉语</item>
<item>韩语</item>
<item>英语</item>
<item>日语</item>
<item>葡语</item>
<item>俄语</item>
</string-array>
</resources>


(3) MainActivity.java

步骤:

1、获取布局ListView

2、封装显示内容list或数组

3、构建适配器Adapter

4、给ListView加入适配器

package com.example.listview;

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

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

private ListView listView2 = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取ListView
listView2 = (ListView) findViewById(R.id.listView2);
//定义数组
String arr[] = new String[]{"中国","韩国","日本","美国","葡萄牙","俄罗斯"};
//声明适配器
//this  上下文
                //android.R.layout.simple_list_item_checked 列表样式
                //arr  显示内容 (数组或list集合)
 ArrayAdapter<String >  arrayAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_checked, arr);
//listView加入适配器
listView2.setAdapter(arrayAdapter);
listView2.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.i("listView", parent.getItemAtPosition(position).toString());

}
});

}
}


执行效果例如以下:





假设想要自己定义列表,列表项显示多个组件。我们能够用SimpleAdapter来自己定义我们的列表。

(1) main_activity.xml

布局了ImageView,TextView 组件,用于显示列表内容

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearlayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>

<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/img"
android:layout_width="50dp"
android:layout_height="65dp"/>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="100dp"
android:layout_marginTop="30dp"
/>
<TextView
android:id="@+id/phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_marginLeft="150dp"
/>
</LinearLayout>
</LinearLayout>


(2)MainActivity.java 步骤与上面的一样

package com.example.listviews;

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

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {

private ListView listView = null; //定义ListView组件

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取listView组件
listView = (ListView) findViewById(R.id.listView);
//初始化基础数据
String name[] = new String[]{"张三","李四","王五","张飞"};
String phone[] = new String[]{"14313426573","15908263541","18012345678","13423456789"};
int img [] = new int[]{R.drawable.name01,R.drawable.name02,R.drawable.name03,R.drawable.name04};
//封装list集合数据
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
for(int i=0;i<name.length;i++){
Map<String,Object> listItem = new HashMap<String, Object>();
listItem.put("img", img[i]);
listItem.put("name", name[i]);
listItem.put("phone", phone[i]);
list.add(listItem);
}
//配置SimpleAdapter适配器
//this  上下文
//R.layout.activity_main   布局文件
//new String[]{"img","name","phone"}    列表内容key
//new int[]{R.id.img,R.id.name,R.id.phone}  用于显示内容的布局组件
SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.activity_main,
new String[]{"img","name","phone"}, new int[]{R.id.img,R.id.name,R.id.phone});
//加入适配器
listView.setAdapter(simpleAdapter);
}

}


执行效果例如以下:



除了SimpleAdapter之外,我们还能够重写BaseAdapter的getView方法作为列表的列表项 。 有兴趣的同学能够动手写写BaseAdapter

方式二:Activity继承ListActivity

注意:

ListActivity的默认布局由一个位于屏幕中心的全屏列表构成。假设你不想使用默认的布局,能够在onCreate()方法中通过setContentView()方法设定你自己的布局。假设指定你自己定制的布局,你的布局中必须包括一个id"@id/android:list"的ListView。 若你还指定了一个id"@id/android:empty"的view。当ListView中没有数据要显示时,这个view就会被显示,同一时候ListView会被隐藏

(1)main_activity.xml

布局了一个ListView和TextView,TextView的id为@id/android:empty,当ListView中没有数据要显示时,这个TextView就会被显示

<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView
android:id="@+id/android:list"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF0000"
android:text="No data"/>

</LinearLayout>


(2) MainActivity.java

package com.example.listactivity;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends ListActivity {

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

String arr[] = new String[]{"中国","韩国","日本","美国","葡萄牙","俄罗斯"};
//设置适配器
ArrayAdapter<String >  arrayAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_checked, arr);
//给ListActivity加入适配器
setListAdapter(arrayAdapter);
}

}




假设ListView没有内容,则显示TextView。

例如以下



方式一和方式二的效果全然一样,不同的是。一个给ListView组件加入适配器。一个给ListActivity类加入适配器而已。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: