英文:
java.lang.RuntimeException: Unable to start activity ComponentInfo... on a null object reference
问题
以下是您要翻译的代码部分:
// 这是活动文件
package com.tourism.myapplication;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Toast;
import com.google.android.material.navigation.NavigationView;
public class navigationdrawer extends AppCompatActivity {
DrawerLayout drawerLayout;
NavigationView navigationView;
Toolbar toolbar;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawerLayout = findViewById(R.id.drawerLayout);
navigationView = findViewById(R.id.navigationView);
toolbar = findViewById(R.id.ttoolbar);
// 步骤1
setSupportActionBar(toolbar);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawerLayout, toolbar, R.string.OpenDrawer, R.string.CloseDrawer);
drawerLayout.addDrawerListener(toggle);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.optTrip) {
Toast.makeText(navigationdrawer.this, "", Toast.LENGTH_SHORT).show();
} else if (id == R.id.optHome) {
loadFragment(new homefrag());
} else if (id == R.id.optAbout) {
Toast.makeText(navigationdrawer.this, "", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(navigationdrawer.this, "", Toast.LENGTH_SHORT).show();
}
drawerLayout.closeDrawer(GravityCompat.START);
return true;
}
});
}
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
private void loadFragment(Fagment fragment) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.container, fragment);
ft.commit();
}
}
这是您的Java代码。如果需要翻译XML布局文件的部分,请告诉我。
英文:
The error
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tourism.myapplication/com.tourism.myapplication.navigationdrawer}: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.drawerlayout.widget.DrawerLayout.addDrawerListener(androidx.drawerlayout.widget.DrawerLayout$DrawerListener)' on a null object reference
this is activity_navigationdrawer.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
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"
android:fitsSystemWindows="true"
tools:openDrawer="start"
android:id="@+id/drawerLayout"
tools:context=".MainActivity">
<include layout="@layout/app_bar_name"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.google.android.material.navigation.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
android:id="@+id/navigationView"
app:headerLayout="@layout/header_layout"
app:menu="@menu/menu_item"/>
</androidx.drawerlayout.widget.DrawerLayout>
This is activity_navigationdrawer.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
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"
android:fitsSystemWindows="true"
tools:openDrawer="start"
android:id="@+id/drawerLayout"
tools:context=".MainActivity">
<include layout="@layout/app_bar_name"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.google.android.material.navigation.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
android:id="@+id/navigationView"
app:headerLayout="@layout/header_layout"
app:menu="@menu/menu_item"/>
</androidx.drawerlayout.widget.DrawerLayout>
This is app_bar_name.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ttoolbar"/>
</com.google.android.material.appbar.AppBarLayout>
<include layout="@layout/content_main"/>
</LinearLayout>
this is the activity file
package com.tourism.myapplication;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Toast;
import com.google.android.material.navigation.NavigationView;
public class navigationdrawer`your text` extends AppCompatActivity {
DrawerLayout drawerLayout;
NavigationView navigationView;
Toolbar toolbar;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawerLayout = findViewById(R.id.drawerLayout);
navigationView = findViewById(R.id.navigationView);
toolbar = findViewById(R.id.ttoolbar);
//step1
setSupportActionBar(toolbar);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawerLayout, toolbar, R.string.OpenDrawer, R.string.CloseDrawer);
drawerLayout.addDrawerListener(toggle);
toggle.syncState();
// /**/ loadFragment(new homefrag());
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id==R.id.optTrip){
Toast.makeText(navigationdrawer.this, "", Toast.LENGTH_SHORT).show();
} else if (id==R.id.optHome) {
loadFragment(new homefrag());
} else if (id==R.id.optAbout) {
Toast.makeText(navigationdrawer.this, "", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(navigationdrawer.this, "", Toast.LENGTH_SHORT).show();
}
drawerLayout.closeDrawer(GravityCompat.START);
return true;
}
});
}
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)){
drawerLayout.closeDrawer(GravityCompat.START);
} else{
super.onBackPressed();
}
}
private void loadFragment(Fragment fragment) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.container, fragment);
ft.commit();
}
}
I tried all solutions please help
答案1
得分: 2
根据您的代码,似乎与布局文件使用有些问题。在Activity中,您使用了R.layout.activity_main
,而您在此处粘贴的代码是activity_navigationdrawer.xml
,所以请在您的onCreate
方法中将R.layout.activity_main
替换为R.layout.activity_navigationdrawer
。
英文:
As per your code , it looks like some issue with layout file use . In Activity , you have used R.layout.activity_main
and code you have pasted here is activity_navigationdrawer.xml
so kindly replace R.layout.activity_main
with R.layout.activity_navigationdrawer
in your onCreate
method
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论