FAB on click start new activity 基于当前显示的片段
FAB on click start new activity based on fragment currently shown
我正在尝试找到一种通过单击浮动操作按钮启动 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
}
}
一个简单的解决方案是:
每当使用底部导航时,只需将选定的片段id保存在静态变量中,当用户按下FAB时,只需根据变量中存储的片段打开activity。
你的方法很好,但是它做了很多不必要的昂贵的片段查找。
您可以通过以下方式获取当前 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
逻辑(如此处所示)以使其更加简洁。
我正在尝试找到一种通过单击浮动操作按钮启动 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
}
}
一个简单的解决方案是:
每当使用底部导航时,只需将选定的片段id保存在静态变量中,当用户按下FAB时,只需根据变量中存储的片段打开activity。
你的方法很好,但是它做了很多不必要的昂贵的片段查找。
您可以通过以下方式获取当前 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
逻辑(如此处所示)以使其更加简洁。