listview简单应用之ArrayAdapter(一)
listview简单应用之ArrayAdapter(二)
listview 是android的一个很常用的组件,我在学习了一段时间后有了一些自己的体会和理解,根据listview匹配不同的适配器的用法,我会分别整理他们的简单使用,大家可以简单清楚的了解他们的基本用法。
listview是能够自适应数据匹配成相应长度的滑动列表,在使用listview时掌握它的3要素就能够理解它的核心了。
- data:将要在listview上展示的列表。
- adapter:data和listview之间的桥梁,data先存放在adapter后再继续在listview上展示。(adapter是使用listview时的必备成分)
- listview:最后展示数据的滑动列表
Adapter常用的有ArrayAdapter、SimpleAdapter、和BaseAdapter等。不同的adapter与listview搭配使用时的功能是不同的,最简单的是ArrayAdapter,这里也先讲这个适配器。举个例子。
在.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" tools:context=".MainActivity" >
<ListView android:id="@+id/lv" android:layout_width="fill_parent" android:layout_height="fill_parent">
</ListView>
</RelativeLayout>
在MainActivity.java中:
public class MainActivity extends Activity implements OnItemClickListener, OnItemLongClickListener {
ListView lv;
ArrayAdapter<String> adapter;
ArrayAdapter<String> arrayada;
String[] data = {"喜剧之王","功夫","逃学威龙","周星驰","喜剧之王","功夫","逃学威龙","周星驰","喜剧之王","功夫","逃学威龙","周星驰","喜剧之王","功夫","逃学威龙","周星驰",};
//把数组转换成arraylist,让其能够具有删除数据的功能。
List<String> list = Arrays.asList(data);
List<String> arrayList = new ArrayList<String>(list);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
arrayada = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList);
/*这里的3个参数分别是this,布局文件,(simple_list_item_1表示设置单行文字显示)和数据源。 * 这一行表示把数据装入到adapter中。*/
lv.setAdapter(arrayada);
lv.setOnItemClickListener(this);
lv.setOnItemLongClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "欢迎进入!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, final int position,
long arg3) {
//String aa =(String) arrayList.get(position);
new AlertDialog.Builder(MainActivity.this)
.setTitle("温馨提示")
// 设置对话框标题
.setMessage("是否删除数据?")
// 设置显示的内容
.setPositiveButton("确定",new DialogInterface.OnClickListener() {// 添加确定按钮
@Override
public void onClick(DialogInterface dialog,int which) {// 确定按钮的响应事件
// TODO Auto-generated method stub
/*finish();*/
arrayList.remove(position);
System.out.println("删除:"+list);
arrayada.notifyDataSetChanged();
}
})
.setNegativeButton("不",
new DialogInterface.OnClickListener() {// 添加返回按钮
@Override
public void onClick(DialogInterface dialog,
int which) {// 响应事件
// TODO Auto-generated method stub
Log.i("alertdialog", " 请保存数据!");
}
}).show();// 在按键响应事件中显示此对话框
return true;//**当返回为true时,在长点击的时候,能够屏蔽短的点击事件**
}
需要注意的是:**当我想删除数据时,对数组进行操作是很麻烦的,所以我在这里要把数组转换成list,list是一集合,可以把它理解成动态有remove、add方法的数组。但是因为用asList(data)这个方法转换后的list是没有remove、add方法的,所以再把list转换成arrayList对其操作。
List list = Arrays.asList(data);//转换
List arrayList = new ArrayList(list);**