ListActivity类的用法

来源:互联网 发布:富豪移民 知乎 编辑:程序博客网 时间:2024/06/05 16:37

一、ListActivity类继承Activity类,默认绑定了一个ListView(列表视图)界面组件,并提供一些与列表视图、处理相关的操作。
一般首界面才用ListActivity。ListActivity中默认绑定ListView,其listView界面组件中的每一行(row)都可以被选择。我们可以借由设置一个onListItemClick方法,来得到用户正选择了哪一列的信息,并做后续处理。
列表视图在手持设备上运用很多,诸如在手机屏幕上显示通信录列表或电话列表,并让用户从中选择的动作,都属于ListActivity管理范围。开发者在开发常用的列表视图画面时,直接使用ListActivity类来开始,会比从Activity类来开始方便许多。

二、ListActivity:
封装了一个ListView和一个TextView(没有数据时提示)
注意:①给ListView设置适配器:setListAdapter();
②设置ListView的item点击事件:onListItemClick
比起Activity,ListActivity实现时需要注意以下几点:
1、ListActivity不用加载布局,即省略了setContentView(R.layout.main),它默认是LIstView占满屏。
2、如果想在屏幕中显示其他控件,如文本框和按钮之类,可以采用如下方法:
a、代码中添加:setContentView(R.layout.main)
b、在 main_activity.xml 文件中,添加一个ListView控件,和一个 TextView 控件,注意它们 id 必须为”@id/android:list”、”@id/android:empty”;前一个表示匹配的ListView,后一个表示若ListView没有内容则显示的提示。
如果想在屏幕中显示其他控件时activity_main.xml文件中的书写一定要注意listView和textView的id

<LinearLayout> <ListView android:id="@id/android:list"android:layout_width="match_parent"android:layout_height="0dp" android:layout_weight="1" /> <TextView android:id="@id/android:empty" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="Can not find the file!" /></LinearLayout>

MainActivity中的代码如下:

package org.moblie.train.zday10_listactivity;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.ListActivity;import android.os.Bundle;import android.view.View;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends ListActivity {    private List<Map<String, String>> list = new ArrayList<Map<String, String>>();    private MyAdapter adapter;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 若在main_activaty.xml中不添加其他控件时,ListActivity默认有ListView和TextView,故此处不用加载布局。        // setContentView(R.layout.activity_main);        initData();        initViews();    }    private void initViews() {        adapter = new MyAdapter(this, list);        // 此处直接调用setListAdapter。如果listView时通常先初始化listView,然后这么写:listView.setAdapter(adapter);        setListAdapter(adapter);        /**         * // 注意:ListActivity中Item的监听与ListView也有不同。 若是listView通畅这么写:         * getListView().setOnItemClickListener(new OnItemClickListener() {         *          * public void onItemClick(AdapterView<?> parent, View view, int         * position, long id) { } });         */    }    // ListActivity中对Item的监听这么写:    @Override    protected void onListItemClick(ListView l, View v, int position, long id) {        super.onListItemClick(l, v, position, id);        // 以下是两种获取Item内容的方式:        // 1.从适配器中获取Item数据(Map)        Map map = (Map) adapter.getItem(position);        // 或者 2.从ListView中获得数据        Map mapInList = (Map) l.getItemAtPosition(position);        String str = map.get("textView1") + ":" + map.get("textView2");        Toast.makeText(MainActivity.this, str, 0).show();        // makeText()的第三个参数用于设置显示时间,其中        // Toast.LENGTH_LONG可以用1代替        // Toast.LENGTH_SHORT可以用0代替    }    // 这个方法初始化数据用于给每个Item填充值    private void initData() {        for (int i = 0; i < 15; i++) {            Map<String, String> map = new HashMap<String, String>();            map.put("textView1", "this is " + i);            map.put("textView2", "position is " + i);            list.add(map);        }    }}

item_listview.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="vertical" >    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="TextView" />    <TextView        android:id="@+id/textView2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="TextView" /></LinearLayout>

MyAdapter中的代码:

package org.moblie.train.zday10_listactivity;import java.util.List;import java.util.Map;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class MyAdapter extends BaseAdapter {    private List<Map<String, String>> list;    private Context contenxt;    private LayoutInflater inflater;    public MyAdapter(Context context, List<Map<String, String>> list) {        this.contenxt = context;        this.list = list;        inflater = (LayoutInflater) context                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);    }    @Override    public int getCount() {        return list == null ? 0 : list.size();    }    @Override    public Object getItem(int position) {        return list.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        if (convertView == null) {            holder = new ViewHolder();            convertView = inflater.inflate(R.layout.item_listview, parent,                    false);            holder.textView1 = (TextView) convertView                    .findViewById(R.id.textView1);            holder.textView2 = (TextView) convertView                    .findViewById(R.id.textView2);            convertView.setTag(holder);        } else {            holder = (ViewHolder) convertView.getTag();        }        holder.textView1.setText(list.get(position).get("textView1"));        holder.textView2.setText(list.get(position).get("textView2"));        return convertView;    }    class ViewHolder {        private TextView textView1;        private TextView textView2;    }}
1 0