原文转自:
http://blog.youkuaiyun.com/wangliang198901/article/details/12342895
http://www.tuicool.com/articles/uqyey2
除了在Java代码中定义数组,Android还提供了在资源中定义数组,然后在Java代码中解析资源,从而获取数组的方法。实际开发中,推荐将数据存放在资源文件中,以实现程序的逻辑代码与数据分离,便于项目的管理,尽量减少对Java代码的修改。
在资源中定义数组的步骤:
1、在res/values文件夹下创建arrays.xml文件;
2、在arrays.xml文件中创建一个数组,如下代码所示
<span style="font-family:Microsoft YaHei;"><? xml version = "1.0" encoding = "UTF-8" ?>
< resources >
< string-array name = "citys" >
< item > 北京 </ item >
< item > 天津 </ item >
< item > 上海 </ item >
< item > 重庆 </ item >
</ string-array >
</ resources ></span>
3、创建Resources对象
<span style="font-family:Microsoft YaHei;">Resources res=getResources();
String[] citys=res.getStringArray(R.array.citys);</span>
ArrayAdapter
ArrayAdapter的构造函数:
ArrayAdapter(Context context,int textViewResourceId)
ArrayAdapter(Context context,int resource, int textViewResourceId)
ArrayAdapter(Contextcontext, int textViewResourceId,T[] objects)
ArrayAdapter(Context context, int resource,int textViewResourceId, T[] objects)
ArrayAdapter(Contextcontext, int textViewResourceId,List<T> objects)
ArrayAdapter(Contextcontext, int resource, inttextViewResourceId,List<T> objects)
常用的:第一个参数是上下文,就是当前的Activity,
第二个参数是android sdk中自己内置的一个布局,它里面只有一个TextView,这个参数是表明我们数组中每一条数据的布局是这个view,就是将每一条数据都显示在这个view上面,更多的时候我们会把第二个参数设为R.layout.simple_list_item_1,这是Android定义好的一种item的显示方式,我们不用自己去写xml文件了。;这个布局可以自己定义,这个View或许只是一个简单的TextView,也可能是一个ViewGroup(包含了很多控件)
例如:
<span style="font-family:Microsoft YaHei;"><?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp" >
</TextView></span>
第三个参数就是我们要显示的数据源。
ArrayAdapter例子
package com.example.arrayadapter;
import android.os.Bundle;
import android.app.Activity;
import android.content.res.Resources;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView listView;
private String[] data;
private ArrayAdapter<String>arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView)findViewById(R.id.list_view);
data = getResources().getStringArray(R.array.citys);
arrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1, data);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
/*
* arg1是当前item的view,通过它可以获得该项中的各个组件。 例如arg1.textview.settext("asd");
* arg2是当前item的ID。这个id根据你在适配器中的写法可以自己定义。
* arg3是当前的item在listView中的相对位置!*/
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,
"第" + (arg3 + 1) + "项被按下", Toast.LENGTH_SHORT)
.show();
}
});
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,
"第" + (arg3 + 1) + "项被--长时间--按下", Toast.LENGTH_SHORT)
.show();
return true;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ListView android:id="@+id/list_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
></ListView>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="citys">
<item >a</item>
<item >b</item>
<item >c</item>
<item >d</item>
<item >e</item>
<item >f</item>
</string-array>
</resources>