RxAndroid+Retrofit+GreenDao+MVP框架---通用基类封装(二)

打算分为通用的方法,基类封装;网络请求框架封装(RxAndroid+Retrofit);数据库操作封装(GreenDao);

查看完整框架可以到GitHub下载https://github.com/850125665/WeatherApp

解放双手,减少在AndroidManifes.xml配置activity

  • 一个应用有多个activity就要在AndroidManifes.xml重复配置,如何减少在AndroidManifes.xml配置呢,主要是通过一个activity的复用,每个页面都能复用一个activity。
TerminalAcitvity.java相关代码
public class TerminalActivity extends BaseFragmentActivity {

public static String FRGMENT_CLASS = "fragment_class";

/**
 * 封装intent
 */
public static class WrapIntent{
    private Intent intent;
    private Context mContext;
    public WrapIntent(Context context, Bundle bundle, Class<? extends Fragment> fragmentClass, Class<? extends Activity> activity){
        if(context==null){
            context= AppInfo.getAppInstant().getMyContext();
        }
        mContext= context;
        if(activity==null){
            activity=TerminalActivity.class;
        }
        intent = new Intent(context,activity);
        if(bundle==null){
            bundle = new Bundle();
        }
        bundle.putSerializable(FRGMENT_CLASS,fragmentClass);
        intent.putExtra(BUNDLE_DATA,bundle);
    }

    /**
     * 跳转
     */
    public void show(){
        if(!(mContext instanceof Activity)){
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        }
        mContext.startActivity(intent);
    }

    /**
     * activity跳转带foresult
     * @param requestCode
     */
    public void showForResult(int requestCode){
        if(!(mContext instanceof Activity)){
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        }
        ((Activity)mContext).startActivityForResult(intent,requestCode);
    }

    /**
     * fragment跳转带foresult
     * @param requestCode
     * @param fragment
     */
    public void showForResultFromFragment(int requestCode,Fragment fragment){
        fragment.startActivityForResult(intent,requestCode);
    }


}

/**
 * 跳转,可跳转到某个activity
 * @param context
 * @param fClass
 * @param bundle
 * @param activity
 */
public static void show(Context context,Class<? extends Fragment> fClass,Bundle bundle,Class<? extends Activity> activity){
    new WrapIntent(context,bundle,fClass,activity).show();
}


/**
 * 跳转到指定的TerminalActivity
 * @param context
 * @param fClass
 * @param bundle
 */
public static void show(Context context,Class<? extends Fragment> fClass,Bundle bundle){
    new WrapIntent(context,bundle,fClass,TerminalActivity.class).show();
}


/**
 * activity跳转带回复
 * @param context
 * @param fClass
 * @param bundle
 * @param requestCode
 */
public static void showForResult(Context context,Class<? extends Fragment> fClass,Bundle bundle,int requestCode){
    new WrapIntent(context,bundle,fClass,TerminalActivity.class).showForResult(requestCode);
}


/**
 * fragment跳转带回复
 * @param context
 * @param fClass
 * @param bundle
 * @param fragment
 * @param requestCode
 */
public static void showForResultFromFragment(Context context,Class<? extends Fragment> fClass,Bundle bundle,Fragment fragment,int requestCode){
    new WrapIntent(context,bundle,fClass,TerminalActivity.class).showForResultFromFragment(requestCode,fragment);
}

/**
 * xml文件id
 *
 * @return
 */
@Override
protected int getContenViewId() {
    return R.layout.activity_terminal;
}

/**
 * 初始化识图
 */
@Override
public void initView() {

}

@Override
public void receptIntent(Bundle bundle) {
    super.receptIntent(bundle);
    initFragment(bundle);
}

/**
 * 初始化fragment
 * @param bundle
 */
private void initFragment(Bundle bundle) {
    Fragment fragment = null;
    Log.v(TAG,"initFragment");
    try {
        Class fClass = (Class) bundle.getSerializable(FRGMENT_CLASS);
        fragment = (Fragment) fClass.newInstance();
    } catch (InstantiationException e) {
        e.printStackTrace();
        finish();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
        finish();
    }
    fragment.setArguments(bundle);
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.fl_content,fragment);
    fragmentTransaction.commitAllowingStateLoss();
}
}
主要是通过FragmentManager.replace去替换 FrameLayout内容。所以我们只需在TerminalAcitvity加一个空的FrameLayout布局,每次启动该activity时替换下布局。
activity_terminal.xml布局如下
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fl_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</FrameLayout>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值