[英]Android navigation using fragments and java.reflect
我正在考虑使用Java反射API生成的片段在android应用程序中的不同屏幕之间导航的方法。 但是我想知道这种方法是否正确。
问题:我的应用程序中有很多屏幕,从我的第一个活动(HomeActivity)的NavigationDrawer或主菜单均可访问所有屏幕。 这些屏幕中的许多屏幕在屏幕的页眉或页脚部分都使用类似的UI行为(例如,屏幕的页眉部分是身份验证活动访问或搜索活动访问)。 所以我想使用片段来避免代码重复。 这个想法:只有一个FragmentActivity可以显示所有这些屏幕,并且通过选择屏幕来更改片段。
我制作了一个图表来表示该解决方案: http : //hpics.li/8689dab
一旦选择了一个屏幕(使用主菜单或NavigationDrawer中的按钮),就会将一组Class作为Intent发送给FragmentActivity。 我们使用这些Class对象生成片段,并将其显示在FragmentActivity中。 每次选择另一个屏幕时,我们都会重复此过程,而不会保留片段以避免内存超载。
我的问题是:使用此技术,java反射会极大地影响导航吗?
先感谢您。
可行,只需将Fragment的类名传递给FragmentActivity。
FragmentActivity:
public class MyFragmentActivity extends FragmentActivity {
public static Fragment fragment;
public static final String FRAGCLASS = "fragmentclass";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.fragment_layout);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
//get Fragment's class name
String fragment_className = this.getIntent().getStringExtra(FRAGCLASS);
//Initialize fragment
Class<?> c = null;
try {
c = Class.forName(fragment_className);
this.fragment = (Fragment) c.newInstance();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.fragment.setArguments(this.getIntent().getExtras());
//R.id.view from R.layout.fragment_layout
fragmentTransaction.add(R.id.view, this.fragment,"tag" + fragment_className);
fragmentTransaction.commit();
}
}
fragment_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
</RelativeLayout>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.