Android 写出高质量的代码

本文对比了两种实现 Android ListView 的方法,一种是简单的 ArrayAdapter 应用,另一种则是通过 SimpleAdapter 结合 Intent 动态获取数据的方式。后者虽然代码量更大,但具备更好的可扩展性和维护性,能够自动识别并实现 ListView 新增项的跳转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自http://www.eoeandroid.com/code/2011/1229/525.html

 

listviewandroid中是一个非常普通的组件,通常我们都是这样用的(如你并非这样,那么恭喜你,你有优秀程序员的潜力):

01 <font face="'Times New Roman'"><font color="#000000">
02 this.setListAdapter(newArrayAdapter<String>(this,
03                android.R.layout.simple_list_item_1,
04 newString[]{"list1","list2","list3"}));
05         
06     }
07     @Override
08     protected voidonListItemClick(ListView l, View v, int position, longid) {
09  
10 Intent i=new Intent();
11  
12 switch (position) {
13 case 0:
14 i.setClass(ListTest.this, List1.class);
15 startActivity(i);
16 break;
17 case 1:
18 i.setClass(ListTest.this, List2.class);
19 startActivity(i);
20 break;
21 case 2:
22 i.setClass(ListTest.this, List3.class);
23 startActivity(i);
24 break;
25  
26 default:
27 break;
28 }
29  
30 super.onListItemClick(l, v, position,id);
31     }
32  
33 </font></font>
这个不必多说,再看实现同样的功能google实现的代码:
1   setListAdapter(new SimpleAdapter(this, getData(), android.R.layout.simple_list_item_1,new String[]{"title"},new
2 int[]{android.R.id.text1}));
3         getListView().setTextFilterEnabled(true);
4 }
这里的adpter填充数据是取自getData()这个方法,如下:
01   
02 private List getData(){
03      List<Map>dataList=new ArrayList<Map>();
04      Intentintent=new Intent(Intent.ACTION_MAIN, null);//取得标明为Main的activity
05      intent.addCategory(Intent.CATEGORY_SAMPLE_CODE);
06      PackageManagerpManager=getPackageManager();//获得包名
07      List<ResolveInfo>list=pManager.queryIntentActivities(intent, 0);//装载包路径名
08  
09 if (null==list) {
10 return dataList;
11        }
12 int len=list.size();
13      Log.i("len===", String.valueOf(len));
14  
15 for (int i = 0; i < len;i++) {
16         ResolveInfoinfo=list.get(i);
17         CharSequencelable=info.loadLabel(pManager);
18  
19 if("com.android.test".equals(info.activityInfo.applicationInfo.packageName)) {
20               addItem(dataList, lable.toString(), myIntent(info.activityInfo.applicationInfo.packageName,
21                      info.activityInfo.name));   //myIntet()方法设置intent跳转的类名
22            }
23        }
24 return dataList;
25     }
  再看addItem()方法:
01 private void addItem(List<Map> data,Stringname,Intent intent){
02      Map<String,Object> map=new HashMap<String, Object>();
03      map.put("title", name);   //将传入的title放入map中以供填充adapter使用
04      map.put("intent", intent);//将传入的intent放入map中以供跳转使用
05      data.add(map);
06     }
07  
08 private Intent myIntent(StringcontentPkg,String toPkg){
09      Intenti=new Intent();
10      i.setClassName(contentPkg,toPkg);
11 return i;
12     }
13  
14 @Override
15 protected
16 void onListItemClick(ListView l, View v, int position, long id) {
17      Mapmap=(Map) l.getItemAtPosition(position);
18      Intentintent=(Intent) map.get("intent");
19      startActivity(intent);
20     }
         在这里,代码量似乎是多了不少,很多一步直接写上的都用方法封装起来,看起来很零碎但却非常独立,可塑性非常强,如:一旦为listview添加新的item的话,只需要重新写一个跳转后的类该代码段会自动识别并实现跳转,无需为adapter重新填充,可以说这段代码无需改动而能实现任何数量的listview的添加,当然你要为此写上跳转的目的类,且这个目的类要标记为.
1 <action android:name="android.intent.action.MAIN"/>
2 <category
3 android:name="android.intent.category.SAMPLE_CODE"/>

 

这是google源码里涉及到的,我将其中涉及到listview部分简化出来以便大家专注研究严谨精炼的代码是怎么构造出来的,呵呵,源码是个好东西,希望大家多抽时间看看,为便于大家比较优虐,我将上面的两个源码贴出来:
http://www.eoe.cn/uploadfile/2011/1229/20111229103249289.rar
http://www.eoe.cn/uploadfile/2011/1229/20111229103250197.rar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值