ListActivity类的用法

一、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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值