Android重要组件ListView的技术使用,研究。(持续更新...)
2016-04-28 17:42
691 查看
列表视图ListView是Android技术中重要的组件之一,我们能在绝大多数Android app中能见到这个技术的使用,那么用好它将会对我们的Android开发能力有很大的帮助。
总结一下ListView的一些常被使用的方式:listview组件是必须要有一个适配器加载子视图和数据的。其中最为常见的适配器有3种ArrayAdapter,SimpleAdapter和SimpleCursorAdapter。
1.简单的文本信息显示视图列表 使用适配器ArrayAdapter ,效果如下图:
源代码很简单的几行:
这个配置界面上的listview,你必须要先获得listview的对象。
还有一种是activity直接继承listactivity,就不需要获取listview对象,因此设置适配器的时候直接使用setAdapter函数。
2.和数据库绑定在一起的listview,使用的组件是SimpleCursorAdapter
使用listview组件显示Android通讯录中人员的姓名列表:运行效果如下
在通讯录中已经有了21个联系人,点击新增联系人按钮可以动态添加新的联系人 :运行效果如下
布局文件:activity_main.xml
对应的java文件:MainActivity .java
注意在配置文件中配置用户读写通讯录的权限
3.通过simpleaCursordapter适配器使用自己定义的布局文件来使用listview
界面布局文件:activity_main.xml
嵌套的布局文件:userinfo.xml
还有其他功能上的嵌套布局文件,在此先不提...
对应的java文件:MainActivity .java
运行效果如下:初始化有自定义的数据库中有一条数据:jack ,male
添加一条心新数据 :herry ,formale
总结一下ListView的一些常被使用的方式:listview组件是必须要有一个适配器加载子视图和数据的。其中最为常见的适配器有3种ArrayAdapter,SimpleAdapter和SimpleCursorAdapter。
1.简单的文本信息显示视图列表 使用适配器ArrayAdapter ,效果如下图:
源代码很简单的几行:
private ListView listView ; private ArrayAdapter<String> arrayAdapter ; private ArrayList al = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); al.add("jack"); al.add("herry"); al.add("lisa"); al.add("sesilia"); listView = (ListView)findViewById(R.id.listView1); arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, al); listView.setAdapter(arrayAdapter); }
这个配置界面上的listview,你必须要先获得listview的对象。
还有一种是activity直接继承listactivity,就不需要获取listview对象,因此设置适配器的时候直接使用setAdapter函数。
2.和数据库绑定在一起的listview,使用的组件是SimpleCursorAdapter
使用listview组件显示Android通讯录中人员的姓名列表:运行效果如下
在通讯录中已经有了21个联系人,点击新增联系人按钮可以动态添加新的联系人 :运行效果如下
布局文件:activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/listView1" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="0dp" > </ListView> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="新增联系人" /> </LinearLayout>
对应的java文件:MainActivity .java
package com.example.lvsimplecursoradapter; import android.app.Activity; import android.content.ContentUris; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.Contacts.People; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.provider.ContactsContract.Contacts.Data; import android.provider.ContactsContract.RawContacts; import android.view.View; import android.widget.Button; import android.widget.ListView; import android.widget.SimpleCursorAdapter; public class MainActivity extends Activity { private int people = 0 ; private SimpleCursorAdapter simpleCursorAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView)findViewById(R.id.listView1); Button b = (Button)findViewById(R.id.button1); Cursor cursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null); startManagingCursor(cursor); simpleCursorAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_expandable_list_item_1, cursor, new String[]{People.NAME}, new int[]{android.R.id.text1}); listView.setAdapter(simpleCursorAdapter); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub ContentValues values = new ContentValues(); //首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values); long rawContactId = ContentUris.parseId(rawContactUri); //往data表插入姓名数据 values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//内容类型 values.put(StructuredName.GIVEN_NAME, "联系人" + rawContactId); getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); refreshListView(); } private void refreshListView() { // TODO Auto-generated method stub Cursor cursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null); simpleCursorAdapter.changeCursor(cursor); } }); } }
注意在配置文件中配置用户读写通讯录的权限
3.通过simpleaCursordapter适配器使用自己定义的布局文件来使用listview
界面布局文件:activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_weight="1"> </ListView> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="0dp" android:orientation="horizontal" android:layout_weight="6"> <TextView android:id="@+id/textView1" android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_weight="1" android:text="name:" /> <EditText android:id="@+id/editText1" android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_weight="1" android:ems="10" > </EditText> <TextView android:id="@+id/textView2" android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_weight="1" android:text="gender:" /> <EditText android:id="@+id/editText2" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="match_parent" android:ems="10" > </EditText> <Button android:id="@+id/button1" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="match_parent" android:text="添加" /> </LinearLayout> </LinearLayout>
嵌套的布局文件:userinfo.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="match_parent" android:layout_height="wrap_content" android:text="TextView" /> <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout>
还有其他功能上的嵌套布局文件,在此先不提...
对应的java文件:MainActivity .java
package com.example.sqliteex; import java.util.zip.Inflater; import android.app.AlertDialog; import android.app.Dialog; import android.app.ListActivity; import android.content.ContentValues; import android.content.DialogInterface; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v4.widget.SimpleCursorAdapter; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; public class MainActivity extends ListActivity { private SimpleCursorAdapter adapter; private DBHelper db ; private SQLiteDatabase read; private SQLiteDatabase write; private Button add ; private EditText name ; private EditText sex ; private AdapterView.OnItemClickListener listViewClickListener = new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub //System.out.println(22222); LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this); View view = layoutInflater.inflate(R.layout.infoeditor, null); final EditText name = (EditText)view.findViewById(R.id.name); final EditText sex = (EditText)view.findViewById(R.id.sex); Cursor c = adapter.getCursor(); c.moveToPosition(arg2); name.setText(c.getString(c.getColumnIndex("name"))); sex.setText(c.getString(c.getColumnIndex("sex"))); final int itemId = c.getInt(c.getColumnIndex("_id")); Dialog dialog = new AlertDialog.Builder(MainActivity.this).setView(view).setTitle("修改信息").setMessage("你确定要修改吗?").setNegativeButton("cancel", null).setPositiveButton("change", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub ContentValues values = new ContentValues(); values.put("name", name.getText().toString().trim()); values.put("sex", sex.getText().toString().trim()); write.update("userinfo", values, "_id = ?", new String[]{itemId + ""}); refreshListView(); } }).create(); dialog.show(); }}; private AdapterView.OnItemLongClickListener listViewItemLongClickListener = new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3) { // TODO Auto-generated method stub //System.out.println(1111);//成功执行到这一步 new AlertDialog.Builder(MainActivity.this).setMessage("are you sure delete this item?").setTitle("warnning").setNegativeButton("cancel", null).setPositiveButton("sure", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub //System.out.println(1111); Cursor c = adapter.getCursor(); c.moveToPosition(arg2); int itemId = c.getInt(c.getColumnIndex("_id")); write.delete("userinfo", "_id = ?", new String[]{itemId + ""}); refreshListView(); } }).show(); return true; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getListView().setOnItemLongClickListener(listViewItemLongClickListener); getListView().setOnItemClickListener(listViewClickListener); add = (Button)findViewById(R.id.button1); name = (EditText)findViewById(R.id.editText1); sex = (EditText)findViewById(R.id.editText2); db = new DBHelper(this, null, null, 0); read = db.getReadableDatabase(); write = db.getWritableDatabase(); Cursor cursor = read.query("userinfo", null, null, null, null, null, null, null); adapter = new SimpleCursorAdapter(this, R.layout.userinfo, cursor, new String[]{"name","sex"} , new int[]{R.id.textView1,R.id.textView2}); setListAdapter(adapter); // SQLiteDatabase write = db.getWritableDatabase(); // SQLiteDatabase read = db.getReadableDatabase(); // ContentValues values = new ContentValues(); // values.put("name", "henrry"); // values.put("sex", "男"); // write.insert("userinfo", null, values); // // values.put("name", "li"); // values.put("sex", "女"); // write.insert("userinfo", null, values); add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub String str1 = name.getText().toString(); String str2 = sex.getText().toString(); ContentValues value = new ContentValues(); value.put("name", str1); value.put("sex", str2); write.insert("userinfo", null, value); refreshListView(); } }); } // new OnItemLongClickListener() { // // @Override // public boolean onItemLongClick(AdapterView<?> arg0, View arg1, // final int arg2, long arg3) { // // TODO Auto-generated method stub // // new AlertDialog.Builder(MainActivity.this).setMessage("are you sure delete this item?").setTitle("warnning").setNegativeButton("cancel", null).setPositiveButton("sure", new DialogInterface.OnClickListener() { // // @Override // public void onClick(DialogInterface arg0, int arg1) { // // TODO Auto-generated method stub // // Cursor c = adapter.getCursor(); // c.moveToPosition(arg2); // int itemId = c.getInt(c.getColumnIndex("_id")); // write.delete("userinfo", "_id = ?", new String[]{itemId + ""}); // // refreshListView(); // } // }); // // // return true; // } // } // private void refreshListView() { Cursor c = read.query("userinfo", null, null, null, null, null, null); adapter.changeCursor(c); } }
运行效果如下:初始化有自定义的数据库中有一条数据:jack ,male
添加一条心新数据 :herry ,formale
相关文章推荐
- Android中引起内存泄露的原因分析
- 实例解析如何在Android应用中实现弹幕动画效果
- android中的所谓观察者模式
- Android 动画笔记
- Android TextView 代码中设置DrawableLeft 图片
- Android上实现zip解压缩
- 合理使用Android提供的Annotation来提高代码的质量
- android Tab 类型切换界面
- Android 播放音频
- Android-如何在代码中获取attr属性的值
- Android将Activity 打 jar包 (解决资源文件不能打包的问题)
- Android adb install INSTALL_FAILED_DEXOPT
- android 读取手机通讯录并显示listview
- 《ArcGIS Runtime SDK for Android开发笔记》——(13)、图层扩展方式加载Google地图
- Android之EditText属性详解
- Android中修改toast的显示位置
- Android SDK开发
- Android检测版本更新
- 详解Android App卸载后跳转到指定的反馈页面的方法
- 安卓 .9.png图片写聊天对话框的 详细教程