忘了在上篇介绍,绑定了的apilist是怎么点击之后跳转到对应Activity的
人人工程师有别于其他人的做法,把Activity跳转写到了一个invoke类中,然后根据Activity名字调用相应的Activity
adapter中绑定事件的代码
itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ApiDemoInvoker.invoke(activity, item.getInvokeName()); } });
/** * $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 ([email protected]) */ 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的时候 只要在这个类中就可以 是门面模式吗?(个人理解,设计模式研究不多)
缺点
和所有设计模式一样,增加的复杂度.