人人网SDK Demo项目学习 3 在apilist中绑定事件调用Activity

来源:互联网 发布:福建广电网络 泉州 编辑:程序博客网 时间:2024/04/29 17:38

忘了在上篇介绍,绑定了的apilist是怎么点击之后跳转到对应Activity的

人人工程师有别于其他人的做法,把Activity跳转写到了一个invoke类中,然后根据Activity名字调用相应的Activity

adapter中绑定事件的代码

itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ApiDemoInvoker.invoke(activity, item.getInvokeName());}});

ApiDemoInvoker类

/** * $id$ */package com.renren.api.connect.android.demo;import android.app.Activity;import android.content.Intent;import com.renren.api.connect.android.Renren;import com.renren.api.connect.android.demo.activity.ApiFeedPublishActivity;import com.renren.api.connect.android.demo.activity.ApiUsersInfoActivity;import com.renren.api.connect.android.demo.activity.FriendsGetActivity;import com.renren.api.connect.android.demo.activity.FriendsGetFriendsActivity;import com.renren.api.connect.android.demo.activity.PayActivity;/** * Demos the how to use Renren APIs *  * @author Shaofeng Wang (shaofeng.wang@renren-inc.com) */public final class ApiDemoInvoker {private static Renren renren;/** * Initialize the invoker. This method must be called before calling * 'invoke' *  * @param renren */public static void init(Renren renren) {ApiDemoInvoker.renren = renren;}/** * Call the api demo methods specified by its invoke name *  * @param activity *            The activity in which the method is called * @param invokeName *            The name used to specify which demo method to be called */public static void invoke(Activity activity, String invokeName) {if (invokeName.equals(activity.getString(R.string.publish_status_invoke))) {StatusDemo.publishStatus(activity, renren);} else if (invokeName.equals(activity.getString(R.string.one_click_status_invoke))) {StatusDemo.publishStatusOneClick(activity, renren);} else if (invokeName.equals(activity.getString(R.string.one_click_photo_invoke))) {PhotoDemo.uploadPhotoWithActivity(activity, renren);} else if (invokeName.equals(activity.getString(R.string.publish_photo_invoke))) {PhotoDemo.uploadPhoto(activity, renren);} else if (invokeName.equals(activity.getString(R.string.create_album_invoke))) {PhotoDemo.createAlbum(activity, renren);} else if (invokeName.equals(activity.getString(R.string.albums_info_invoke))) {PhotoDemo.getAlbums(activity, renren);} else if (invokeName.equals(activity.getString(R.string.dialog_feed_invoke))) {WidgetDialogDemo.showFeedDialog(activity, renren);} else if (invokeName.equals(activity.getString(R.string.dialog_status_invoke))) {WidgetDialogDemo.showStatusDialog(activity, renren);} else if (invokeName.equals(activity.getString(R.string.publish_feed_invoke))) {Intent intent = new Intent(activity, ApiFeedPublishActivity.class);intent.putExtra(Renren.RENREN_LABEL, renren);activity.startActivity(intent);} else if (invokeName.equals(activity.getString(R.string.users_getinfo_invoke))) {Intent intent = new Intent(activity, ApiUsersInfoActivity.class);intent.putExtra(Renren.RENREN_LABEL, renren);activity.startActivity(intent);} else if (invokeName.equals(activity.getString(R.string.friends_get_invoke))) {Intent intent = new Intent(activity, FriendsGetActivity.class);intent.putExtra(Renren.RENREN_LABEL, renren);activity.startActivity(intent);} else if (invokeName.equals(activity.getString(R.string.friends_get_friends_invoke))) {Intent intent = new Intent(activity,FriendsGetFriendsActivity.class);intent.putExtra(Renren.RENREN_LABEL, renren);activity.startActivity(intent);} else if (invokeName.equals(activity.getString(R.string.extensions_pay_invoke))) {Intent intent = new Intent(activity, PayActivity.class);intent.putExtra(Renren.RENREN_LABEL, renren);activity.startActivity(intent);}}}

反思一下这样做法的优缺点

优点:

1  的list所在的Activity代码超级简洁 只管绑定数据就可以 注册事件在adapter中进行

2  代码结构更加清晰,跳转时间由专门的invoke类负责 增加其他Activity的时候 只要在这个类中就可以 是门面模式吗?(个人理解,设计模式研究不多)

缺点

和所有设计模式一样,增加的复杂度.





原创粉丝点击