gpt4 book ai didi

java - FAB 单击时根据当前显示的 fragment 启动新 Activity

转载 作者:行者123 更新时间:2023-12-01 16:28:42 25 4
gpt4 key购买 nike

我正在尝试找出一种通过单击 float 操作按钮来启动 Activity 的好方法。我的 FAB 位于 mainactivity.xml 中。我的 MainActivity 由带有 fragment 的底部导航组成。我需要实现由显示的 fragment 确定的不同的点击操作。

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
}

}

最佳答案

你的方法很好,但它做了许多不必要的昂贵的 fragment 查找。

您可以通过以下方式获取当前 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))
}

这样就不需要对每个条件进行Fragment查找,只需简单地比较id即可。您还可以提取共享的 startActivity 逻辑(如此处所示)以使其更加简洁。

关于java - FAB 单击时根据当前显示的 fragment 启动新 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62096521/

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