i3geek.com
闫庚哲的个人博客

Android之Spinner(下拉框)的使用

yan阅读(5685)

一、使用数组作为数据源(使用ArrayAdapter进行适配数据)

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class SpinnerActivity extends Activity {

	private static final String[] m={"A型","B型","O型","AB型","其他"};
	private TextView view ;
	private Spinner spinner;
	private ArrayAdapter<String> adapter;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.spinner);

		view = (TextView) findViewById(R.id.spinnerText);
		spinner = (Spinner) findViewById(R.id.Spinner01);
		//将可选内容与ArrayAdapter连接起来
		adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,m);

		//设置下拉列表的风格
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

		//将adapter 添加到spinner中
		spinner.setAdapter(adapter);

		//添加事件Spinner事件监听  
		spinner.setOnItemSelectedListener(new SpinnerSelectedListener());

		//设置默认值
		spinner.setVisibility(View.VISIBLE);

	}

	//使用数组形式操作
	class SpinnerSelectedListener implements OnItemSelectedListener{

		public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
				long arg3) {
			view.setText("你的血型是:"+m[arg2]);
		}

		public void onNothingSelected(AdapterView<?> arg0) {
		}
	}
}

二、使用XML作为数据源 (Spinner的UI格式)

在values文件夹下新建一个arryas.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string-array name="plantes">
		<item>NOKIA</item>
		<item>MOTO</item>
		<item>HTC</item>
		<item>LG</item>
		<item>其他</item>
	</string-array>
</resources>

 

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class SpinnerActivity extends Activity {

	private TextView view2;
	private Spinner spinner2;
	private ArrayAdapter adapter2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.spinner);

		spinner2 = (Spinner) findViewById(R.id.spinner02);
		view2 = (TextView) findViewById(R.id.spinnerText02);

		//将可选内容与ArrayAdapter连接起来
		adapter2 = ArrayAdapter.createFromResource(this, R.array.plantes, android.R.layout.simple_spinner_item);

		//设置下拉列表的风格	
 adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

		//将adapter2 添加到spinner中
		spinner2.setAdapter(adapter2);

		//添加事件Spinner事件监听  
		spinner2.setOnItemSelectedListener(new SpinnerXMLSelectedListener());

		//设置默认值
		spinner2.setVisibility(View.VISIBLE);

	}

	//使用XML形式操作
	class SpinnerXMLSelectedListener implements OnItemSelectedListener{
		public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
				long arg3) {
			view2.setText("你使用什么样的手机:"+adapter2.getItem(arg2));
		}

		public void onNothingSelected(AdapterView<?> arg0) {

		}

	}
}

三、使用自定义的Adapter(自定义格式和数据)

①建立一个自定义类。(这里以Person类为例)

package com.jiangqq.csdn;
public class Person {
	private String personName;
	private String personAddress;
	public Person(String personName, String personAddress) {
		super();
		this.personName = personName;
		this.personAddress = personAddress;
	}
	public String getPersonName() {
		return personName;
	}
	public void setPersonName(String personName) {
		this.personName = personName;
	}
	public String getPersonAddress() {
		return personAddress;
	}
	public void setPersonAddress(String personAddress) {
		this.personAddress = personAddress;
	}

}

②创建MyAdapter继承与BaseAdapter,进行适配:

package com.jiangqq.csdn;

import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/**
 * 自定义适配器类
 * @author jiangqq  <a href=http://blog.csdn.net/jiangqq781931404></a>
 *
 */
public class MyAdapter extends BaseAdapter {
	private List<Person> mList;
	private Context mContext;

	public MyAdapter(Context pContext, List<Person> pList) {
		this.mContext = pContext;
		this.mList = pList;
	}

	@Override
	public int getCount() {
		return mList.size();
	}

	@Override
	public Object getItem(int position) {
		return mList.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}
    /**
     * 下面是重要代码
     */
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		LayoutInflater _LayoutInflater=LayoutInflater.from(mContext);
		convertView=_LayoutInflater.inflate(R.layout.item, null);
		if(convertView!=null)
		{
			TextView _TextView1=(TextView)convertView.findViewById(R.id.textView1);
			TextView _TextView2=(TextView)convertView.findViewById(R.id.textView2);
			_TextView1.setText(mList.get(position).getPersonName());
			_TextView2.setText(mList.get(position).getPersonAddress());
		}
		return convertView;
	}
}

③在Activity中加入如下代码:

                // 初始化控件
mSpinner = (Spinner) findViewById(R.id.spinner1);
// 建立数据源
   List<Person>  persons=new ArrayList<Person>();
persons.add(new Person("张三", "上海 "));
persons.add(new Person("李四", "上海 "));
persons.add(new Person("王五", "北京" ));
persons.add(new Person("赵六", "广州 "));
//  建立Adapter绑定数据源
MyAdapter _MyAdapter=new MyAdapter(this, persons);
//绑定Adapter
mSpinner.setAdapter(_MyAdapter);

四、使用list链表作为数据源

public class WuliuMain extends Activity
{
	private List<String> list = new ArrayList<String>();
	private Spinner mySpinner;
	private ArrayAdapter<String> adapter;

	protected void onCreate(Bundle savedInstanceState)
	{
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.wuliu_main);

		list.add("ems快递");
		list.add("申通");
		list.add("顺丰");
		mySpinner = (Spinner) findViewById(R.id.spinner1);
                adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_spinner_item, list);
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		mySpinner.setAdapter(adapter);
	}
}

 

android 获取并解析json数据格式

yan阅读(4003)

利用系统自带com.org.json包解析json

示例json:

{
    "code": "1", 
    "msg": "查询成功", 
    "books": [
        {
            "bookid": 100836, 
            "bookname": "六年级英语"
        }, 
        {
            "bookid": 100836, 
            "bookname": "六年级英语"
        }
    ]
}

解析代码:

int code = jsonObject.getInt("code");
String msg = jsonObject.getString("msg");
JSONArray jsonArray = jsonObject.getJSONArray("books");
 // 循环获取Books
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject jo = jsonArray.getJSONObject(i);
    jo.getInt("bookid");
    jo.getString("bookname");
}

json获取代码:

try
// 获取json
{
	String path = "http://www.weather.com.cn/data/cityinfo/101010100.html";
	URL url = new URL(path);
	HttpURLConnection connection = (HttpURLConnection) url
			.openConnection();
	connection.setConnectTimeout(3000);
	connection.setRequestMethod("GET");
	connection.setDoInput(true);
	int code = connection.getResponseCode();
	if (code == 200)// 接收json
	{

		ByteArrayOutputStream outPutStream = new ByteArrayOutputStream();
		byte[] data = new byte[1024];
		int len = 0;
		try
		{
			while ((len = connection.getInputStream().read(data)) != -1)
			{
				outPutStream.write(data, 0, len);
			}
			jsonString = new String(outPutStream.toByteArray());

		} catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
} catch (Exception e)
{
	// TODO: handle exception
}

json数据格式解析我自己分为两种;

一种是普通的,一种是带有数组形式的;

普通形式的:

服务器端返回的json数据格式如下:

{"userbean":{"Uid":"100196","Showname":"\u75af\u72c2\u7684\u7334\u5b50","Avtar":null,"State":1}}

分析代码如下:

// TODO 状态处理 500 200 
int res = 0; 
res = httpClient.execute(httpPost).getStatusLine().getStatusCode(); 
if (res == 200) { 
/* 
* 当返回码为200时,做处理 
* 得到服务器端返回json数据,并做处理 
* */ 
HttpResponse httpResponse = httpClient.execute(httpPost); 
StringBuilder builder = new StringBuilder(); 
BufferedReader bufferedReader2 = new BufferedReader( 
new InputStreamReader(httpResponse.getEntity().getContent())); 
String str2 = ""; 
for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2 
.readLine()) { 
builder.append(s); 
} 
Log.i("cat", ">>>>>>" + builder.toString());

JSONObject jsonObject = new JSONObject(builder.toString()) 
.getJSONObject("userbean");

String Uid; 
String Showname; 
String Avtar; 
String State;

Uid = jsonObject.getString("Uid"); 
Showname = jsonObject.getString("Showname"); 
Avtar = jsonObject.getString("Avtar"); 
State = jsonObject.getString("State");

 带数组形式的:

服务器端返回的数据格式为:

{"calendar": 
{"calendarlist": 
[ 
{"calendar_id":"1705","title":"(\u4eb2\u5b50)ddssd","category_name":"\u9ed8\u8ba4\u5206\u7c7b","showtime":"1288927800","endshowtime":"1288931400","allDay":false}, 
{"calendar_id":"1706","title":"(\u65c5\u884c)","category_name":"\u9ed8\u8ba4\u5206\u7c7b","showtime":"1288933200","endshowtime":"1288936800","allDay":false} 
] 
} 
}

分析代码如下:

// TODO 状态处理 500 200 
int res = 0; 
res = httpClient.execute(httpPost).getStatusLine().getStatusCode(); 
if (res == 200) { 
/* 
* 当返回码为200时,做处理 
* 得到服务器端返回json数据,并做处理 
* */ 
HttpResponse httpResponse = httpClient.execute(httpPost); 
StringBuilder builder = new StringBuilder(); 
BufferedReader bufferedReader2 = new BufferedReader( 
new InputStreamReader(httpResponse.getEntity().getContent())); 
String str2 = ""; 
for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2 
.readLine()) { 
builder.append(s); 
} 
Log.i("cat", ">>>>>>" + builder.toString()); 
/** 
* 这里需要分析服务器回传的json格式数据, 
*/ 
JSONObject jsonObject = new JSONObject(builder.toString()) 
.getJSONObject("calendar"); 
JSONArray jsonArray = jsonObject.getJSONArray("calendarlist"); 
for(int i=0;i<jsonArray.length();i++){ 
JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i); 
CalendarInfo calendarInfo = new CalendarInfo(); 
calendarInfo.setCalendar_id(jsonObject2.getString("calendar_id")); 
calendarInfo.setTitle(jsonObject2.getString("title")); 
calendarInfo.setCategory_name(jsonObject2.getString("category_name")); 
calendarInfo.setShowtime(jsonObject2.getString("showtime")); 
calendarInfo.setEndtime(jsonObject2.getString("endshowtime")); 
calendarInfo.setAllDay(jsonObject2.getBoolean("allDay")); 
calendarInfos.add(calendarInfo); 
}

 总结,普通形式的只需用JSONObject ,带数组形式的需要使用JSONArray 将其变成一个list。

Android Get提交获取解析XML

yan阅读(5766)

1.控制层里面的代码:

private static final String TAG="GetXMLTest";
public void getXMLTest() throws Exception {
//因为我们的NetTool函数请求网页的方式是get,那么我们的path里面就需要带参数了。
String path = "http://211.143.108.6/wap/ResCatService?act=pic&s=h";//如果参数是中文,必须进行Url进行编码
// 如URLEncoder.encode(s, enc
//将要请求的页面Path和网页的编码传递到NetTool类中,返回一个String类型的值。先看看getTextContent是怎么处理的。
String xml = NetTool.getTextContent(path, "UTF-8");
//getTextContent方法做了些什么?就是将服务器返回的数据流转换成了字符串。
//建立一个文件输出流,准备将得到的字符串存到本地的手机上。
/**先拆分一下代码:
* FileOutputStream outstream = new FileOutputStream(
* new File(Environment.getExternalStorageDirectory(),"test.xml"));
*等于一下代码
* File file1 = new File(dir, name); 实例化一个File文件
* dir参数就是Environment.getExternalStorageDirectory()
* Environment.getExternalStorageDirectory()===等于==="/sdcard"。就是手机卡的内存卡的地址
* name参数是test.xml
*然后将为file1实例化一个输出流。
* FileOutputStream Stream =new FileOutputStream(file1);
*/
FileOutputStream outstream = new FileOutputStream(
new File(Environment.getExternalStorageDirectory(),"test.xml"));
//准备写出输出流
OutputStreamWriter writer = new OutputStreamWriter(outstream);
//将xml字符串写到文件里面去
writer.write(xml);
//写完之后,推出去。用文件浏览器看看有没有保存到文件~~~~
writer.flush();
//关闭。
writer.close();
Log.i(TAG, xml);
}

2.看看业务层的代码,有两个方法

public static String getTextContent( String urlpath,String encoding) throws Exception {
//可以看到,getTextContent接收到了目前还处于字符串形似的path,和编码。
//将字符串形式的path,转换成一个url
URL url = new URL(urlpath);
//得到url之后,将要开始连接网络,以为是连接网络的具体代码
//首先,实例化一个HTTP连接对象conn
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//定义请求方式为GET,其中GET的大小写不要搞错了。
conn.setRequestMethod("GET");
//定义请求时间,在ANDROID中最好是不好超过10秒。否则将被系统回收。
conn.setConnectTimeout(6*1000);
//请求成功之后,服务器会返回一个响应码。如果是GET方式请求,服务器返回的响应码是200,post请求服务器返回的响应码是206(貌似)。
if(conn.getResponseCode()== 200){
//返回码为真
//从服务器传递过来数据,是一个输入的动作。定义一个输入流,获取从服务器返回的数据
InputStream inStream = conn.getInputStream();
//得到输入流的数据之后,调用readStream方法对输入流进行处理。返回的一个字节数组。
//按ctrl进入readStream方法,看看readStream是怎么处理的
byte[] data = readStream(inStream);
//得到返回值。那么readStream主要做了些什么?readStream主要处理了将服务器返回的数据写到内存这个工作,也就是保存到了本地(我觉得)。
//以字符串形式的返回。String(data,encoding)是个知识点。
return new String(data,encoding);
} 
return null;
}

方法2:

public static byte[] readStream(InputStream inStream) throws Exception{
//readStream获得了传递进来的输入流
//要返回输入流,就需要定义一个输出流。
//定义一个字节数组型的输出流,ByteArrayOutputStream
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//建立一个缓冲区buffer
byte[] buffer = new byte[1024];
int len= -1;
//将输入流不断的读,并放到缓冲区中去。直到读完
while((len=inStream.read(buffer))!=-1){
//将缓冲区的数据不断的写到内存中去。边读边写
outStream.write(buffer, 0, len);
}
outStream.close();
inStream.close();
//将输出流以字节数组的方式返回
return outStream.toByteArray();
}

总结一下:

虽然整个代码是做出来了,但是还是要巩固一下:
回想一下整个流程:
1.得到请求服务器的url地址的参数,
2.发送请求,得到返回的响应码
3.判断响应码是不是GET方式
4.将得到的输入流读取,并返回一个字符串。
5.新建一个文件,将得到的字符串作为数据填充到文件中。
恩~~流程大概是这样的了~~~
不过,以上的流程有个鸟用。稍微有点常识的人都知道怎么做。。。。具体一点,具体一点。具体一点。
详细一点:
为什么要写那么类,那么多方法。完成这样的一个功能,完全只要一个类即可搞定。
因为~~~额~~因为什么呢~·mvc三层架构这是一个比较合理的解释吧。也有利代码的管理和重复使用不是。
好,我们开始整个获取xml流程之旅吧~·
1.得到一个url和网页的编码
2.将url和encoding传到业务层的方法gettext中
3.gettext方法中 建一个HttpURLConnection连接对象,请求服务器
4.在gettext方法中 判断返回码时候是你请求的方式,这里是200码
5.在gettext方法中 获取服务器返回的输入流
6.在readStream中 读取输入流,返回字符串
7.现在又返回到控制层
8.新建一个文件
9.新建一个文件输出流
10.将返回的字符串写到文件里
11.查看

Android—基础 在程序中添加图片!

yan阅读(6131)

第一种在xml布局文件中添加(静态的添加)

<ImageView  
android:id="@+id/image_1"  
android:layout_width="wrap_content"  
android:layout_height="wrap_content"  
android:src="@drawable/me"  
></ImageView>

 

就像在html标签中

image

android:src引用的图片的路径!

在res建立drawable文件夹其中的me为文件的名字。

 

 

第二种(动态的添加)

在Activity中动态的添加

例如当点击按钮时 显示图片

public class Framemain extends Activity {  
    private ImageView imageView;  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.framemain);  
        Intent intent=this.getIntent();  
        TextView textView=(TextView)findViewById(R.id.showUser);  
        textView.setText(intent.getStringExtra("username"));      
        imageView=(ImageView) findViewById(R.id.me_image);  
        Resources resources=getResources();  
        Drawable drawable =resources.getDrawable(R.drawable.me);  
        imageView.setImageDrawable(drawable);  
    }  
}

 

ListView的Adapter使用 之 初学ArrayAdapter

yan阅读(2348)

ListView是Android中经常会使用的东西,绑定数据对于初学者来说,尤其是刚接触编程的人来说,往往会觉得很难理解.Android中Adapter我是这么理解的,是数据和视图之间的桥梁,数据在adapter中做处理,然后显示到视图上面。

Adapter有很多种,有ArrayAdapter<T>, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter, WrapperListAdapter.

我在项目中用到过的就ArrayAdapter<T>, (数组也可以是对象数组),BaseAdapter(所有Adapter的基类),SimpleAdapter,CursorAdapter(数据来源是cursor),SimpleCursorAdapter,感觉有必要总结一下。

最基本的要数sdk官网上面给的这个代码例子了http://developer.android.com/resources/tutorials/views/hello-listview.html。

 

我自己写的一个例子,先上图,再贴上代码:

package com.cz.list.demo; 

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

public class ArrayListDemo extends Activity { 
    private ListView listView; 
    private String[] adapterData; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.array_list_layout); 

        /* 找到这个listView */ 
        listView = (ListView) findViewById(R.id.array_list); 

        /* 我们要在listView上面没条显示的数据,放到一个数组中 */ 
        adapterData = new String[] { "Afghanistan", "Albania", "Algeria", 
                "American Samoa", "Andorra", "Angola", "Anguilla", 
                "Antarctica", "Antigua and Barbuda", "Argentina", "Armenia", 
                "Aruba", "Australia", "Austria", "Azerbaijan", "Bahrain", 
                "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", 
                "Benin", "Bermuda", "Bhutan", "Bolivia", 
                "Bosnia and Herzegovina", "Botswana", "Bouvet Island" }; 

        /* 这个是数组string类型的数组 */ 
        // ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>( 
        // ArrayListDemo.this, android.R.layout.simple_list_item_1, 
        // adapterData); 

        /* 设置ListView的Adapter */ 
        listView.setAdapter(new ArrayAdapter<String>(ArrayListDemo.this, 
                android.R.layout.simple_list_item_1, adapterData)); 
    } 
}

1. 适配器的作用是数据和视图之间的桥梁

2. 这个小例子是要显示一个数组,我们就用ArrayAdapter,数组适配器,数据的数据类型<>是String类型的,数据的数据类型还可以是其他的包括对象类型的

3. ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
ArrayListDemo.this, android.R.layout.simple_list_item_1,
adapterData);

这段代码是创建一个数组适配器的代码,里面有三个参数,第一个参数是上下文,就是当前的Activity, 第二个参数是android sdk中自己内置的一个布局,它里面只有一个TextView,这个参数是表明我们数组中每一条数据的布局是这个view,就是将每一条数据都显示在这个view上面;第三个参数就是我们要显示的数据。listView会根据这三个参数,遍历adapterData里面的每一条数据,读出一条,显示到第二个参数对应的布局中,这样就形成了我们看到的listView.

Android之ListView的用法

yan阅读(54068)

简单的现实一个列,并对其点击事件做处理

1、让activity继承ListActivity,并且舍弃XML布局文件,全部采用默认布局中存在的布局来布局(=、=)。

首先将继承的Activity改为ListActivity,删除掉

setContentView(R.layout.activity_main);这一句。

然后这个MainActivity本身就是一个ListActivity

public class MainActivity extends ListActivity {

    private List<String> arrayData;
//  private List<Map<String, ?>> simpleData;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        arrayData = getData();
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrayData);
        setListAdapter(adapter);
    }
    private List<String> getData() {
        List<String> data = new ArrayList<String>();
        data.add("刘备");
        data.add("关羽");
        data.add("张飞");
        data.add("赵云");
        return data;
    }
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        Toast.makeText(this, arrayData.get(position), Toast.LENGTH_LONG).show();
    }

可以重写ListActivity的系列方法,如onListItemClick();等

2、依然让MainActivity继承Activity,不舍弃XML文件布局方法。

在main布局文件中可以只是简单的布局一个ListView控件,代码就不贴了

在java类中,代码以及注释如下:

public class MainActivity extends Activity {

    private List<String> arrayData;
//  private List<Map<String, ?>> simpleData;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        arrayData = getData();
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrayData);
        //继承自ListActivity的时候
//        setListAdapter(adapter);
        //采用布局文件来布局
        setContentView(R.layout.activity_main);
        ListView listview = (ListView) this.findViewById(R.id.listView);
        listview.setAdapter(adapter);
        listview.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long id) {
                Toast.makeText(getApplicationContext(), arrayData.get(position), Toast.LENGTH_LONG).show();
            }
        });
    }
    //如果是继承ListeActivity的话,可以通过重写一下方法来设置点击事件
//  @Override
//    protected void onListItemClick(ListView l, View v, int position, long id) {
//      // TODO Auto-generated method stub
//      super.onListItemClick(l, v, position, id);
//      Toast.makeText(this, arrayData.get(position), Toast.LENGTH_LONG).show();
//    }
    private List<String> getData() {
        List<String> data = new ArrayList<String>();
        data.add("刘备");
        data.add("关羽");
        data.add("张飞");
        data.add("赵云");
        return data;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

效果一样。