- 浏览: 5102750 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
基本功能:读取手机通讯录,形成列表,显示人名、电话,将勾选的信息保存到常用联系人数据库,再次打开时,根据常用联系人数据库中的信息,设置ListView中项目的勾选状态。
效果如下图所示:
主要涉及三个文件,详细内容如下:
ListView的子项目,文件名:person_row.xml:
布局文件,文件名contact_activity:
JAVA文件,文件名ContactActivity :
效果如下图所示:
主要涉及三个文件,详细内容如下:
ListView的子项目,文件名:person_row.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:descendantFocusability="blocksDescendants" android:layout_width="match_parent" android:layout_height="match_parent"> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false" android:clickable="false" android:id="@+id/contact_checbox" /> <TextView android:layout_width="2dp" android:layout_height="wrap_content" android:id="@+id/contact_id" android:visibility="invisible" /> <TextView android:layout_width="60dp" android:layout_height="wrap_content" android:text="" android:id="@+id/contact_name" android:textAlignment="textStart" android:background="#ffe222" style="@style/style_edit" /> <TextView android:layout_width="90dp" android:layout_height="wrap_content" android:text="" android:id="@+id/contact_mobile" android:textAlignment="textStart" android:background="#34ff1d" style="@style/style_edit" /> <TextView android:layout_width="60dp" android:layout_height="wrap_content" android:text="" android:id="@+id/contact_title" android:background="#cafeff" /> <TextView android:layout_width="60dp" android:layout_height="wrap_content" android:text="" android:id="@+id/contact_remark1" android:background="#b5aaff" style="@style/style_edit" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:id="@+id/contact_remark2" /> </LinearLayout>
布局文件,文件名contact_activity:
<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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.wallimn.iteye.msgutil.ContactActivity"> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/contact_list" android:layout_alignParentStart="true" /> </RelativeLayout>
JAVA文件,文件名ContactActivity :
package com.wallimn.iteye.msgutil; import android.app.ProgressDialog; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.os.Handler; import android.os.Message; import android.provider.ContactsContract; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.CheckedTextView; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; public class ContactActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { /** * 简短的联系人信息类 */ public static class ContactDetail{ public String id; public String name; public String mobile; public String title; public String remark1; public boolean checked; public ContactDetail(String id,String name,String mobile){ this.id = id; this.name = name; this.mobile = mobile; this.title = ""; this.remark1=""; } public ContactDetail(String id,String name,String mobile,String title,String remark1){ this.id = id; this.name = name; this.mobile = mobile; this.title = title; this.remark1 = remark1; } } /** * 所有联系人列表,读取手机通讯录的结果 */ List<ContactDetail> allContacts; /** * 界面元素 */ ListView listView; /** * 读取联系人的线程 */ Thread readContactsThread; Handler messageHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_LIST: if (proDialog != null) { proDialog.dismiss(); proDialog = null; } freshListView(); } } }; private final int UPDATE_LIST=0x3390; private ProgressDialog proDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_contact); listView = (ListView)this.findViewById(R.id.contact_list); listView.setItemsCanFocus(false); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); listView.setOnItemClickListener(this); allContacts = new LinkedList<ContactDetail>(); readContactsThread=new Thread(new ReadContactsRunnable()); readContactsThread.start(); proDialog = ProgressDialog.show(ContactActivity.this, "请稍候","正在读取联系人......", true, true); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_contact, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); //点击菜单上的确定后,将数据保存到本机的数据库中。 if (id == R.id.menu_ok) { Map<String ,String> sels = new HashMap<String ,String>(); SQLiteDatabase db = DbUtil.getConnection(this); Map<String,String> ids = DbUtil.getLocalContactId(db); String insertsql = "insert into t_person (name,mobile,contactid) values(?,?,?)"; String deletesql = "delete from t_person where contactid=?"; int selCount = 0; for(ContactDetail cd:this.allContacts) { //如果选中、且本地数据库中没有,插入本地数据库 if (cd.checked == true) { if (!ids.containsKey(cd.id)) { db.execSQL(insertsql, new String[]{cd.name, cd.mobile, cd.id}); Log.i("wallimn", "插入:" + cd.name); selCount++; } sels.put(cd.id, "1"); } } Log.i("wallimn", "共计:" + allContacts.size() + ",选中:" + selCount); //删除这次未选的。 for(String key:ids.keySet()){ if(!sels.containsKey(key)){ db.execSQL(deletesql,new Object[]{key}); } } db.close();; db=null; this.finish(); return true; } else if(id == R.id.menu_cancel) { this.finish(); return true; } return super.onOptionsItemSelected(item); } /** * 刷新ListView显示 */ private void freshListView(){ Log.i("wallimn","联系人装载完毕,准备生成列表,读取联系人数量:"+allContacts.size()); if(allContacts!=null){ ContactAdapter adapter = new ContactAdapter(ContactActivity.this,this.allContacts); //读取数据库中保存的常用联系人,如果存在,设置该行为选中状态。 Map<String,String> ids = DbUtil.getLocalContactId(ContactActivity.this); for(ContactDetail cd :allContacts){ if(ids.containsKey(cd.id))cd.checked=true; } listView.setAdapter(adapter); } Log.i("wallimn","列表生成完毕"); } /** * 设置了ListView中的checkbox不能获取焦点、不能点击,ListView才会响应这个事件 * @param parent * @param view * @param position * @param id */ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.i("wallimn","ItemClick被点击,position="+position+" , id="+id); CheckBox cb = (CheckBox)view.findViewById(R.id.contact_checbox); cb.setChecked(!cb.isChecked()); allContacts.get((int) id).checked = cb.isChecked(); } /** * 读取联系人的线程,读取完成后,数据保存到List中,最后发送消息,通知界面更新显示 */ class ReadContactsRunnable implements Runnable{ @Override public void run() { Uri uri = ContactsContract.Contacts.CONTENT_URI; String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.PHOTO_ID }; String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'"; String[] selectionArgs = null; String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; ContentResolver contentResolver = ContactActivity.this.getContentResolver(); Cursor cursor=contentResolver.query(uri, projection, selection, selectionArgs, sortOrder); //Cursor cursor=managedQuery(uri, projection, selection, selectionArgs, sortOrder); Cursor phonecur = null; int count = 0; while (cursor.moveToNext()){ // 取得联系人名字 int nameFieldColumnIndex = cursor.getColumnIndex(android.provider.ContactsContract.PhoneLookup.DISPLAY_NAME); String name = cursor.getString(nameFieldColumnIndex); // 取得联系人ID String contactId = cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID)); //phonecur = managedQuery(android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, android.provider.ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); phonecur = contentResolver.query(android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, android.provider.ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); // 取得电话号码(可能存在多个号码) while (phonecur.moveToNext()){ String strPhoneNumber = phonecur.getString(phonecur.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Phone.NUMBER)); strPhoneNumber = strPhoneNumber.replace("-", "").replace("+86","").replace(" ",""); if(strPhoneNumber.length()==11) { //allContacts.add(new ContactDetail(contactId, "wallimn", "13801380000")); allContacts.add(new ContactDetail(contactId, name, strPhoneNumber)); } } count++; phonecur.close(); phonecur = null; //if(count>20)break; } cursor.close(); Message loaded=new Message(); loaded.what=UPDATE_LIST; messageHandler.sendMessage(loaded); } } @Override protected void onDestroy() { super.onDestroy(); allContacts.clear(); } /** * 联系人信息适配器 */ public static class ContactAdapter extends BaseAdapter{ private List<ContactDetail> list; private Context context; public List<ContactDetail> getList(){ return this.list; } /** * 构造函数,传入list参数,避免代码耦合 * @param list */ public ContactAdapter(Context context,List<ContactDetail> list){ this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ContactDetail cd = list.get(position); final int index = position; if(convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.person_row, null); }else{ ; } ((TextView)convertView.findViewById(R.id.contact_id)).setText(cd.id); ((TextView)convertView.findViewById(R.id.contact_name)).setText(cd.name); ((TextView)convertView.findViewById(R.id.contact_mobile)).setText(cd.mobile); ((TextView)convertView.findViewById(R.id.contact_title)).setText(cd.title); ((TextView)convertView.findViewById(R.id.contact_remark1)).setText(cd.remark1); ((CheckBox) convertView.findViewById(R.id.contact_checbox)).setChecked(cd.checked); return convertView; } } }
发表评论
-
APK开发示例---网页上常见的Panel效果
2015-11-19 22:26 2258今天琢磨了一下Activity布局中圆角、边框、背景等问题 ... -
Android 布局中位置和大小单位相关探索
2015-11-19 13:12 1551转自:http://blog.sina.com.c ... -
APK开发示例---比赛简易计分器
2015-11-19 00:45 2799最近学习Android程序开发。突发奇想,琢磨了一下自身的 ... -
短信通知提醒APK
2015-11-03 21:20 1356引言 最近学习Android开发,动手做了一个小APK,是 ... -
Android超级终端文件处理命令
2015-10-22 10:30 1221转自:http://jingyan.baidu.com/art ... -
Android Studio开发环境搭建手记
2015-10-19 13:16 4165引言 我机器的操作 ...
相关推荐
Android开发:实现带图片和checkbox的listview
Android开发——listview中嵌套checkBox复选框实现单选、全选删除列表内容 详情可以看我的博客http://blog.csdn.net/jxnk25/article/details/50358231
android listView项中含有checkBox、Button和EditText; EditText的值可以通过按钮加减和直接输入; 滑动时保持checkBox与EditText的状态。
主要介绍了Android编程中ListView结合CheckBox实现批量选择,包括实现全选、反选、全不选等操作,感兴趣的小伙伴们可以参考一下
在Android某些开发需求当中,有时候需要在listveiw中加入checkbox实现单选,多选操作。
1、这个主要是针对于考试类程序用的,比如其中如何向ListView中动态添加多个RadioButton单选题选项以及多个CheckBox多选题选项,另外,多个填空题的话,也可以用类似的方法整。 2、解决ListView中添加Button、...
Android应用源码之ListView+CheckBox UI 完美版。实现 全选 、 全不选 、 删除等功能项目安卓应用源码Android应用源码之ListView+CheckBox UI 完美版。实现 全选 、 全不选 、 删除等功能项目安卓应用源码 1.适合...
主界面CheckBoxinListViewActivity.java代码如下: 代码如下: public class ... private ListView listview; private Button checkAll; private Button noCheckAll; @Override public void onCreate(Bundle
背景一个典型的ListView,每个Item显示一个TextView,代表一个Task,需要实现二个编辑方式:一个是用CheckBox来标识任务已经完成,另一个要实现的编辑是删除任务。对于完成的CheckBox就直接放在布局中就可,但对于...
主要介绍了android使用listview显示sqlite数据的方法,需要的朋友可以参考下
第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android开发环境搭建 2.1 ...
应用开发中经常会有从数据库中读取数据显示,然后选中多条、全部记录并且删除的需求。在做定制系统联系人的时候也遇到这样的需求,下面写个简单的通过ListView和CheckBox实现多选、全选的例子。下面是具体的代码. ...
MVP模式 ListView中嵌入checkBox的使用 本文写的是一个小demo,如何在ListView中嵌入checkBox配合使用,本篇文章与前面的嵌入Button类似,同样的采用MVP模式的写代码,本次案例中会有几个小细节,我将会在案例中介绍...
最近在做项目的过程中,在使用listview的时候遇到了设置item监听事件的时候在没有回调onItemClick 方法的问题。我的情况是在item中有一个Button按钮。所以不会回调。上百度找到了解决办法有两种,如下: 1、在...
新版Android开发教程及笔记-完整版 《Android中文教程》中文版 《android基础教程合集》 Android实例教程 会员贡献索引贴 实用Android开发工具和资源精选 APK权限大全 - Android必懂知识 最无私的Android资料...
demo实现了listview嵌套checkbox实现全选、反选、取消等功能,解决了listview滑动后checkbox状态错乱
带有抽屉效果的ListView,类似QQ聊天列表效果。SlideListView,配合SlideListAdapter使用
《Android开发案例驱动教程》 配套代码。 注: 由于第12,13,14章代码太大,无法上传到一个包中。 这三节代码会放到其他压缩包中。 作者:关东升,赵志荣 Java或C++程序员转变成为Android程序员 采用案例驱动模式...