繁体   English   中英

使用片段和java.reflect的Android导航

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM