您的位置:首页 > 其它

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

2012-10-13 19:20 537 查看
忘了在上篇介绍,绑定了的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的时候 只要在这个类中就可以 是门面模式吗?(个人理解,设计模式研究不多)

缺点

和所有设计模式一样,增加的复杂度.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: