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

浙公网安备 33010602011771号