您的位置:首页 > 移动开发 > Android开发

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

2016-12-16 14:02 337 查看

打算分为通用的方法,基类封装;网络请求框架封装(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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android