我正在尝试在新项目中使用 BottomNavigation 实现 NavController。这是我的第一次尝试,到处都有很多关于此的模糊信息。
所以我的问题涉及每个底部选项卡都有自己的后堆栈并在底部导航点击之间保留片段。是的,我看过https://github.com/android/architecture-components-samples/tree/master/NavigationAdvancedSample我无法理解如何将其与我现有的 Java 代码集成,因为示例是 Kotlin 中的。
谁能帮我这个?
好吧,经过几个小时的尝试,我所做的是使用示例 Kotlin 项目,然后将我的 java 类、资源和资产导入到该项目中。为了更改 mainactivity.kt,我对其进行了反编译并找到了以下文件。这仍然是基本的工作原理,但至少我已经有了框架,并且有望节省一些人的时间……
package com.example.android.navigationadvancedsample;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer;
import androidx.navigation.NavController;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import kotlin.collections.CollectionsKt;
public class MainActivity extends AppCompatActivity {
private LiveData currentNavController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
getSupportActionBar().hide();
setContentView( R.layout.activity_main );
if (savedInstanceState == null) {
this.setupBottomNavigationBar();
}
}
protected void onRestoreInstanceState(@Nullable Bundle savedInstanceState) {
super.onRestoreInstanceState( savedInstanceState );
this.setupBottomNavigationBar();
}
void setupBottomNavigationBar() {
BottomNavigationView bottomNavigationView = this.findViewById( R.id.bottom_nav );
List navGraphIds = CollectionsKt.listOf( new Integer[]{R.navigation.home, R.navigation.list, R.navigation.form} );
LiveData controller = NavigationExtensionsKt.setupWithNavController( bottomNavigationView, navGraphIds, getSupportFragmentManager(), R.id.nav_host_container, getIntent() );
controller.observe( this, (Observer) (new Observer() {
// $FF: synthetic method
// $FF: bridge method
public void onChanged(Object var1) {
//this.onChanged((NavController)var1);
}
}) );
this.currentNavController = controller;
}
public boolean onSupportNavigateUp() {
LiveData var10000 = this.currentNavController;
boolean var2;
if (var10000 != null) {
NavController var1 = (NavController)var10000.getValue();
if (var1 != null) {
var2 = var1.navigateUp();
return var2;
}
}
var2 = false;
return var2;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)