- 浏览: 499577 次
- 性别:
- 来自: 福州
文章分类
- 全部博客 (165)
- iphone (2)
- android (13)
- 设计模式 (8)
- ND实习小记之Android (63)
- mac使用技巧 (1)
- window phone (1)
- 错误总结 (2)
- 开发记录 (6)
- Android控件常用属性 (7)
- 代码管理工具 (5)
- 黑莓开发 (2)
- Eclipse (9)
- Android实践项目 (6)
- 常用布局 (1)
- 自定义Widget (5)
- adapter (2)
- OsChina Android客户端研究 (1)
- android之我见 (4)
- Java相关 (1)
- 存储 (1)
- 调试 (1)
- NDK相关 (2)
- App Components (7)
- Android_提醒 (2)
- Android_存储 (0)
- Android_线程 (3)
- Android控件使用实例 (5)
- 键盘相关 (1)
- android之我见,源码 (1)
最新评论
-
xy_feng_zhi_chao:
多谢楼主分享
Android中使用styles -
michaelye1988:
soldier93 写道无关素质,我只发表自己的看法!既然你发 ...
如何在window上把你的项目提交到github -
soldier93:
无关素质,我只发表自己的看法!既然你发表了博客我就有权对其评价 ...
如何在window上把你的项目提交到github -
michaelye1988:
soldier93 写道laji 素质真低
如何在window上把你的项目提交到github -
soldier93:
laji
如何在window上把你的项目提交到github
1.用来保存对象
private List<View> listOfPhoneSubView;//存放子View对象 private List<Button> listOfPhoneButton;//左边的按钮,用来选择类型,文本的获取也是通过这里 private List<EditText> listOfPhoneEditText;//右边的文本框,用来获取电话号码 private List<String> listOfPhoneString;//用来保存左边按钮被点击的时候需要传递到别的Activity并显示的字符 private List<Object> listOfPhoneTag;//用来标记对象 private static List<HashMap<String, String>> listOfResolvedPhone;//存放从系统中解析出来的电话信息 private int tagFlag = 0;
2.初始化
private void initList()//初始化ArrayList { listOfPhoneSubView = new ArrayList<View>(); listOfPhoneButton = new ArrayList<Button>(); listOfPhoneEditText = new ArrayList<EditText>(); listOfPhoneString = new ArrayList<String>(); listOfPhoneTag = new ArrayList<Object>(); } private final String string1 = "住宅";//这个不要这样做,可以去读取系统的 private final String string2 = "手机"; private final String string3 = "单位"; private final String string4 = "单位传真"; private final String string5 = "住宅传真"; private final String string6 = "寻呼机"; private final String string7 = "其他"; private final String string8 = "回拨号码"; private final String string9 = "车载电话"; private final String string10 = "公司总机"; private final String string11 = "ISDN"; private final String string12 = "总机"; private final String string13 = "其他传真"; private final String string14 = "无线装置"; private final String string15 = "电报"; private final String string16 = "TTY TDD"; private final String string17 = "单位手机"; private final String string18 = "单位寻呼机"; private final String string19 = "助理"; private final String string20 = "彩信"; private final String string21 = "自定义"; public void initStringListOfNumber()//初始化listOfPhoneString { listOfPhoneString.add(string1); listOfPhoneString.add(string2); listOfPhoneString.add(string3); listOfPhoneString.add(string4); listOfPhoneString.add(string5); listOfPhoneString.add(string6); listOfPhoneString.add(string7); listOfPhoneString.add(string8); listOfPhoneString.add(string9); listOfPhoneString.add(string10); listOfPhoneString.add(string11); listOfPhoneString.add(string12); listOfPhoneString.add(string13); listOfPhoneString.add(string14); listOfPhoneString.add(string15); listOfPhoneString.add(string16); listOfPhoneString.add(string17); listOfPhoneString.add(string18); listOfPhoneString.add(string19); listOfPhoneString.add(string20); listOfPhoneString.add(string21); }
3.开启线程到系统中获取数据
Runnable r = new Runnable() { //处理数据 public void run() { listOfResolvedPhone = QueryLinkmanInfoByRawContactId.queryPhoneInfo(EditLinkman.this, rawContactId); Message msg = new Message(); myHandler.sendMessage(msg);//得到电话信息以后通知更新界面 } };
在queryPhoneInfo()中,我们调用并查询了系统的信息,并对系统中的数据进行匹配处理,最终返回回来得到listOfResolvedPhone会是List<HashMap<String, String>>保存的用户的信息,比如:PHONE_TYPE_ID:1
PHONE_TYPE:住宅 PHONE_NUMBER:13023895363
4.更新界面
private Handler myHandler = new Handler() { @Override public void handleMessage(Message msg) { showPhone();//根据listOfResolvedPhone中的值初始化显示电话信息的LinearLayout->llPhone } }; public void showPhone() { //让顶部啊按钮监听事件 btnPhone.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 增加一个子View System.out.println("增加一个Phone子View"); addSubViewOfPhone(); } }); if(listOfResolvedPhone.isEmpty()) { System.out.println("PhoneList is empty"); //do nothing... } else { System.out.println("PhoneList is NO empty"); int sizeOfResolvedPhone = listOfResolvedPhone.size(); for(int i = 0; i < sizeOfResolvedPhone; i++) { // String phoneTypeId = listOfResolvedPhone.get(i).get(LD_PHONE_ID);//这样做虽然比较好,但是逻辑太乱了,暂时不考虑 String phoneType = listOfResolvedPhone.get(i).get(LD_PHONE_TYPE); String phoneNumber = listOfResolvedPhone.get(i).get(LD_PHONE); LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); View subView = inflater.inflate(R.layout.sub_view_of_add_linkman, null); Button btnChooseType = (Button)subView.findViewById(R.id.svoal_btn_choose_type); EditText rlEditText = (EditText)subView.findViewById(R.id.svoal_et_input); rlEditText.setInputType(InputType.TYPE_CLASS_NUMBER);//设置输入类型和键盘为数字 RelativeLayout rlDel = (RelativeLayout)subView.findViewById(R.id.svoal_rl_del); System.out.println("phoneType:" + phoneType); System.out.println("phoneNumber:" + phoneNumber); btnChooseType.setText(phoneType); rlEditText.setText(phoneNumber); btnChooseType.setOnClickListener(new BtnChooseNumberTypeClickedListener()); rlDel.setOnClickListener(new RlNumberDelClickedListener()); subView.setTag(tagFlag); btnChooseType.setTag(tagFlag); rlEditText.setTag(tagFlag); rlDel.setTag(tagFlag); listOfPhoneSubView.add(subView); listOfPhoneButton.add(btnChooseType); listOfPhoneEditText.add(rlEditText); listOfPhoneTag.add(rlDel.getTag()); tagFlag ++; llPhone.addView(subView, LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);//增加一个View } } }
tag的作用是什么呢?
为什么要给每一个控件都加上一个Tag呢?
有两个方面:
1.当用户删除某一个元素的时候,不一定是从哪里删除,有可能是从列表中间删除,所以当用户点击子View上面的删除按钮的时候,需要通过v.getTag()获得要被删除的是哪个元素。通过这个Tag就可以将他们都删除了。
2.当点击选择电话类型的时候,同样,你需要把用户选择的哪个类型的字符串返回回来,你如何锁定是哪个Button需要被更改呢?同样也是通过Tag,我们在打开选择类型的Activity的时候,不仅将让用户进行选择的List传递过去,也将Tag传递过去,传递过去以后什么都不做,直接返回,返回回来以后就可以找到是哪个Button上面的类型名需要更改了。
public void addSubViewOfPhone() { LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); View subView = inflater.inflate(R.layout.sub_view_of_add_linkman, null); Button btnChooseType = (Button)subView.findViewById(R.id.svoal_btn_choose_type);//选择号码类型 EditText rlEditText = (EditText)subView.findViewById(R.id.svoal_et_input);//接收号码的输入 rlEditText.setHint("电话"); rlEditText.setInputType(InputType.TYPE_CLASS_NUMBER);//设置输入类型和键盘为数字 RelativeLayout rlDel = (RelativeLayout)subView.findViewById(R.id.svoal_rl_del);//右边的删除按钮 btnChooseType.setOnClickListener(new BtnChoosePhoneTypeClickedListener()); rlDel.setOnClickListener(new RlNumberDelClickedListener()); //在创建的时候判断下现在是第几个了,设置btnChooseType上默认显示的内容 switch(listOfPhoneTag.size()) { case 0: btnChooseType.setText(string1); break; case 1: btnChooseType.setText(string2); break; case 2: btnChooseType.setText(string3); break; case 3: btnChooseType.setText(string4); break; case 4: btnChooseType.setText(string5); break; case 5: btnChooseType.setText(string6); break; case 6: btnChooseType.setText(string7); break; case 7: btnChooseType.setText(string8); break; default: btnChooseType.setText(string8);//其他的暂时不考虑啦。就取前8吧 } subView.setTag(tagFlagOfPhone); btnChooseType.setTag(tagFlagOfPhone); rlEditText.setTag(tagFlagOfPhone); rlDel.setTag(tagFlagOfPhone); listOfPhoneSubView.add(subView); listOfPhoneButton.add(btnChooseType); listOfPhoneEditText.add(rlEditText); listOfPhoneTag.add(rlDel.getTag()); tagFlagOfPhone ++; llPhone.addView(subView, LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); } /** * 删除一个电话subView * */ class RlNumberDelClickedListener implements OnClickListener { public void onClick(View v) { System.out.println("删除:"); //根据tag找到它在list中的位置,删除中所有list中对应的 int id = -1; int sizeOfTag = listOfPhoneTag.size(); for(int i = 0; i < sizeOfTag; i++) { if((Integer)listOfPhoneTag.get(i) == (Integer)(v.getTag())) { System.out.println("找到并删除了索引:" + i); id = i; llPhone.removeView(listOfPhoneSubView.get(id));//越界了 listOfPhoneSubView.remove(id); listOfPhoneButton.remove(id); listOfPhoneEditText.remove(id); listOfPhoneTag.remove(id);//记得Remove掉自己啊!!! break; } else { System.out.println("不可能找不到的!"); } } } } /** * 选择号码类型的按钮被点击的时候 * */ private int tagFlagOfPhone = 0; class BtnChoosePhoneTypeClickedListener implements OnClickListener { public void onClick(View v) { System.out.println("BtnChooseTypeClickedListener:"); System.out.println("v.getTag():" + (Integer)v.getTag()); Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putInt(TAG, (Integer)v.getTag());//这个传递到DialogActivity再从那边传递过来,就可以知道是谁传递的了 bundle.putString(TITLE, "请选择号码类型"); bundle.putString(FLAG, NUMBER); if(listOfPhoneString.isEmpty()) { initStringListOfNumber(); bundle.putStringArrayList(STRING_LIST, (ArrayList<String>)listOfPhoneString); } else { bundle.putStringArrayList(STRING_LIST, (ArrayList<String>)listOfPhoneString); } intent.putExtras(bundle); intent.setClass(EditLinkman.this, DialogActivity.class); startActivityForResult(intent, REQUEST_CODE); } } /** * 将TAG的值传递进来,到TAG数组中进行值匹配 * 将匹配到的索引返回 * */ public int getIndexOfPhoneTag(int TAG) { int index = -1; int sizeOfTag = listOfPhoneTag.size(); for(int i = 0; i < sizeOfTag; i++) { if((Integer)listOfPhoneTag.get(i) == TAG) { index = i; } } return index; }
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); System.out.println("EditLinkman--onActivityResult"); if(requestCode == REQUEST_CODE) { if(resultCode == RESULT_OK) { System.out.println("EditLinkman--RESULT_OK"); Bundle extras = data.getExtras(); if (extras != null) { System.out.println("extras != null:FLAG:" + extras.getString(FLAG).toString()); if(extras.getInt(TAG) == -1) { System.out.println("收到传递回来的空TAG" + extras.getString("TAG")); } else if(extras.getString(FLAG).equals(NUMBER)) { System.out.println("收到传递回来的值" + extras.getInt(TAG)); listOfPhoneButton.get(getIndexOfPhoneTag(extras.getInt(TAG))).setText(extras.getString(VALUE)); } } } } }
发表评论
-
制作一个透明的Activity
2013-01-19 17:02 4254项目中遇到了这个需求,记录下来以便以后查询。顺便写出来供大家 ... -
ListView在应用开发中较为常用的做法
2013-01-14 19:25 5211首先声明下,这是本人自己使用的做法,可能并不适合每个人,但 ... -
Android中使用styles
2013-01-08 10:15 4422在项目开发中经常遇到这样的问题,在很多的Activity中都会 ... -
抽象类和接口
2012-06-11 21:06 1111接口只能定义好空的方法,不能有具体的实现,但是抽象类可以有。一 ... -
根据RawContactId查询联系人信息
2012-05-17 15:08 4174package com.michael.utility. ...
相关推荐
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...