单击时,FAB根据当前显示的片段启动新活动

时间:2020-05-30 00:47:03

标签: java android android-fragments android-activity

我试图通过单击浮动操作按钮找到一种启动活动的好方法。 我的FAB位于mainactivity.xml中。我的MainActivity由带有片段的底部导航组成。我需要实施一个由显示的片段确定的单击操作。

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab_add);
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    fabClicked();
    }
});

fabClicked方法

public void fabClicked() {
    Object id = getSupportFragmentManager().findFragmentById(R.id.container);


    if ((getSupportFragmentManager().findFragmentById(R.id.fragment_1)).equals(id)) {
        Intent intent1 = new Intent(MainActivity.this, Add1.class);
        startActivity(intent1);
    }

    else if ((getSupportFragmentManager().findFragmentById(R.id.fragment_2)).equals(id)) {
        Intent intent2 = new Intent(MainActivity.this, Add2.class);
        startActivity(intent2);
    }

    else if ((getSupportFragmentManager().findFragmentById(R.id.fragment_3)).equals(id)) {
        Intent intent3 = new Intent(MainActivity.this, Add3.class);
        startActivity(intent3);
    }
    else if ((getSupportFragmentManager().findFragmentById(R.id.fragment_home)).equals(id)) {
        //plan to add to code to hide fab on homescreen
    }

}

2 个答案:

答案 0 :(得分:0)

一个简单的解决方案是:

无论何时使用底部导航,只需将选定的片段ID保存在静态变量中,当用户按下FAB时,只需根据存储在变量中的片段打开活动即可。

答案 1 :(得分:0)

您的方法很好,但是它正在执行许多不必要的昂贵的Fragment查找。

您可以使用以下方法获取当前片段的导航ID:

navController.getCurrentDestination().getId()

然后,您可以使用此返回的ID根据Fragment在点击监听器中执行不同的操作,例如:

fun fabClicked() {
    val id = navController.getCurrentDestination().getId()
    val class = when(id) {
        R.id.fragment_1 -> Add1::class
        R.id.fragment_2 -> Add2::class
        // etc
    }
    startActivity(Intent(this, class.javaClass))
}

通过这种方式,您无需为每个条件进行片段查找,只需简单地比较ID。您还可以提取共享的startActivity逻辑(如下所示),以使其更加简洁。

相关问题