gpt4 book ai didi

java - 使用 fragment 和 java.reflect 的 Android 导航

转载 作者:行者123 更新时间:2023-11-30 02:45:15 26 4
gpt4 key购买 nike

我正在考虑一种使用 Java 反射 API 生成的 fragment 在 Android 应用程序中浏览不同屏幕的方法。但我想知道这种方法是否正确。

问题:我的应用程序中有很多屏幕,所有屏幕都可以从我的第一个 Activity (HomeActivity) 中的 NavigationDrawer 或主菜单访问。许多这些屏幕在屏幕的页眉或页 footer 分使用类似的 UI 行为(例如,屏幕的页眉部分是身份验证 Activity 访问或搜索 Activity 访问)。所以我想使用 fragment 来避免代码重复。想法:只有一个 FragmentActivity 来显示所有这些屏幕,通过选择屏幕更改 fragment 。

我制作了一个图表来表示该解决方案:http://hpics.li/8689dab

选择屏幕后(使用主菜单或 NavigationDrawer 中的按钮),一组类作为 Intent 发送到 FragmentActivity。我们使用这些类对象生成 fragment 并将它们显示在 FragmentActivity 中。每次选择另一个屏幕时,我们都会重复该过程,不保留 fragment 以避免内存过载。

我的问题是:java 反射是否会极大地影响使用这种技术的导航?

提前谢谢你。

最佳答案

可行,将Fragment的类名传给FragmentActivity即可。

fragment Activity :

    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 布局.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>

关于java - 使用 fragment 和 java.reflect 的 Android 导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25155943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com