我正在尝试使用android底部导航活动作为片段,但是Android Studio 3.5使用了新的NavController和NavigationUI,这使我很难弄清楚它是如何工作的,并返回运行时错误。
public class BottomFragment extends Fragment {
Activity activity;
public BottomFragment(Activity activity) {
this.activity = activity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.activity_bottom_fragment, container, false);
BottomNavigationView navView = root.findViewById(R.id.nav_view);
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications)
.build();
NavController navController = Navigation.findNavController(activity, R.id.nav_host_fragment);//error here
NavigationUI.setupActionBarWithNavController((AppCompatActivity) activity, navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);
return root;
}}
主班
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportFragmentManager().beginTransaction()
.replace(R.id.mainContainer,new BottomFragment(this)).commit();
}
主要活动布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/mainContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
运行时错误
java.lang.IllegalArgumentException: ID does not reference a View inside this Activity
at android.app.Activity.requireViewById(Activity.java:2678)
at androidx.core.app.ActivityCompat.requireViewById(ActivityCompat.java:363)
at androidx.navigation.Navigation.findNavController(Navigation.java:58)
at com.h_byk.test000.BottomFragment.onCreateView(BottomFragment.java:36)
答案 0 :(得分:0)
您应该将一些代码从公共视图onCreateView放置到onActivityCreated函数。
<h2 class="line_10001">
Goal
</h2>
<h2 class="line-10001">
Goal
::after
</h2>
尝试一下。无论如何,您不应该避免使用新的Google导航组件,请尝试遵循Google文档。阅读this。