Android重要组件ListView的技术使用,研究。(持续更新...)(1)

      列表视图ListView是Android技术中重要的组件之一,我们能在绝大多数Android app中能见到这个技术的使用,那么用好它将会对我们的Android开发能力有很大的帮助。 
    

       总结一下ListView的一些常被使用的方式:listview组件是必须要有一个适配器加载子视图和数据的。其中最为常见的适配器有3种ArrayAdapter,SimpleAdapter以及SimpleCursorAdapter两种使用Android存储的方式(一种使用ContentProvider,一种使用数据库Sqlite)。

      Simpleadapter组件的实现方式也比较简单,基本上和ArrayAdapter 方式一样,具体实例建议查看这个博客文章

      http://blog.csdn.net/x605940745/article/details/11981049

       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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特科技软件开发工作室

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值