devil、frustration 2011-01-12 15:21
浏览 228
已采纳

流泪求达人进来看看……添加联系人的界面如何去得到用户在文本框里输入的文字?

已经头疼两天了……

需求:
在添加联系人的界面(com.android.contacts.ui.EditContactActivity)下,去得到用户在文本框里输入的名字,然后把输入的名字和电话本里现有的名字比较,如有重复,则提示用户。

得到电话本里的联系人名字和号码很容易。
[color=red][b][u]头疼的来了!!——如何去得到用户在文本框里输入的文字?!?!?![/u][/b][/color]
按常理是类似于((EditText)findViewById(R.id.xxxxx)).getText().toString;可问题是我找了半天,找不到任何一个EditText的影子……不知道被封装到哪里去了!!!也不知道文本框里的值在提交的时候存储在哪了!!!
流泪,急盼回答……谢谢各位大虾先!!!

  • 写回答

1条回答 默认 最新

  • weixin_42537988 2011-01-13 15:45
    关注

    com.android.contacts.ui.EditContactActivity类就是编辑联系人的界面,界面下有两个按钮,分别是“保存”和“放弃”。看看EditContactActivity类的声明,它实现了View.OnClickListener接口,并且重写了[code="java"]public void onClick(View view);[/code]方法,所以它在onCreate的时候,就set了这两个按钮的onclick事件为this。

    第一步:
    到EditContactActivity类重写的public void onClick(View view)方法里去,加上这样一段代码(写到保存或者放弃里都可以):
    [code="java"]
    //把mState遍历一遍全打印出来
    if (mState != null)
    {
    for(EntityDelta haha: mState)
    {
    System.out.println(haha.toString());
    }
    }
    [/code]

    第二步:
    编译代码(我是在android源代码上直接修改)的contects应用,并且把编译出来的Contacts.apk文件部署到手机或模拟器(这个编译和部署的步骤我就不详写了,更不要问我android源代码是怎么下载的,呵呵)。cmd命令行打开,用adb logcat命令观看触发事件时打印出来的东西(androidSDK完全配置好后,自己去研究一下adb命令)。
    Contacts.apk文件部署好后,打开手机联系人,新建一个联系人,随便输入名字、姓氏和电话号码,点保存或放弃的按钮去触发你写的onClick事件,在logcat里我的打印结果如下:
    [code="java"]
    I/System.out( 2104): ({ _id=-1, account_name=null, account_type=null, }) =
    I/System.out( 2104): {
    I/System.out( 2104): { _id=-7, mimetype=vnd.android.cursor.item/nickname, data2=1, }
    I/System.out( 2104): { _id=-6, mimetype=vnd.android.cursor.item/note, }
    I/System.out( 2104): { _id=-2, data1=13800138000, mimetype=vnd.android.cursor.item/phone_v2, data2=1, }
    I/System.out( 2104): { _id=-5, mimetype=vnd.android.cursor.item/photo, }
    I/System.out( 2104): { _id=-4, mimetype=vnd.android.cursor.item/name, data2=Testgivenname, data3=TestFamilyname, }
    I/System.out( 2104): { _id=-3, mimetype=vnd.android.cursor.item/email_v2, data2=1, }
    I/System.out( 2104): }
    [/code]
    Testgivenname是我输入的Given name 值
    TestFamilyname是我输入的Family name值
    13800138000是我输入的电话号码

    分析:
    编辑联系人的所有数据都存储在mState里面!!!它EditContactActivity类的成员变量,看看它的声明EntitySet mState;这个EntitySet(com.android.contacts.model.EntitySet)类其实是个ArrayList,里面的元素都是EntityDelta型,看看[code="java"]public class EntitySet extends ArrayList[/code]就知道了。所以上面的haha调用的toString()方法其实就在EntityDelta类(com.android.contacts.model.EntityDelta)里。ok,到EntityDelta里去找到toString()方法,对照打印出来的结果研究一下到底是怎么打印出来的,然后把姓、名、电话号码等数据就可以随便提取出来了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算