通用目标片段活动

时间:2016-07-20 19:58:04

标签: android android-fragments

我不想为每个任务创建新的Activity,因为业务逻辑已由自定义Fragment处理。有一个通用的布局:

<FrameLayout .. >
  <LinearLayout ..
    android:id="@+id/fragment" />
</FrameLayout>

我想创建一个使用它的通用Activity,并由特定的Fragment初始化。

public class LeliFragmentActivity extends LeliBaseActivity {
public static final String KEY_FRAGMENT = BuildConfig.APPLICATION_ID + ".FRAGMENT";

protected void onCreate(Bundle state) {
    super.onCreate(state);
    setContentView(R.layout.activity_with_fragment);

    Fragment fragment = (Fragment ) getIntent().getSerializableExtra(KEY_FRAGMENT);
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, calcFragment);
    transaction.commit();
}

public static void start(Context c, LeliBaseFragment fragment) {
    Intent intent = new Intent(c, LeliFragmentActivity.class);
    intent.putExtra(KEY_FRAGMENT, fragment);
    c.startActivity(intent);
}

但我觉得这不是一个好方法。在Fragment中传递Intent在我看来有点矫枉过正。所有这些序列化都很昂贵。我可以通过课程名称..还是有更好的方法?或者每个(全屏)Activity我应该有一个Fragment?谢谢你的提示。

2 个答案:

答案 0 :(得分:1)

<强>第一

如果方便您,项目不是太大,您可以将一个Activity用于整个项目。但是如果项目很大并且包含很多Fragment s,那么将它们划分为不同活动的逻辑顺序会更好。例如,LoginActivity将表示具有许多Fragment s的所有唱歌/注册流程。比所有需要LeliFragmentActivity s

Fragment

<强>第二

您不必将Fragment传递给对方。要在Fragment之间进行通信,最好和最简单的方法是使用intrefaces之类的文档说。

其他可能的通信方式是事件总线库,如EventBusOtto

答案 1 :(得分:0)

尝试一下: https://gist.github.com/burnermanx/8e80e160dfba2f758546c037fce5269a

我是根据您的问题提出的,但目前对我而言没有用。