Я создал и настроил шаблон Navigation Drawer Activity. В одном из фрагментов есть кнопка Button, при нажатии на которую должна открываться новая активити BDActivity. Я написал следующий код в MainActivity:
public class MainActivity extends AppCompatActivity {
private AppBarConfiguration mAppBarConfiguration;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_help, R.id.nav_play,
R.id.nav_tools, R.id.nav_about, R.id.nav_profile)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
OnBtnClick();
}
public void OnBtnClick(){
this.btn = findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Intent intent = new Intent("ru.example.blippy.BDActivity");
startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
}
При этом приложение не запускается, однако, как только я убираю строку OnBtnClick(); из onCreate, приложение запускается, но кнопка, естественно, не работает. Подскажите, пожалуйста, как поступить?
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ru.example.blippy, PID: 22252
java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.example.blippy/ru.example.blippy.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at ru.example.blippy.MainActivity.OnBtnClick(MainActivity.java:57)
at ru.example.blippy.MainActivity.onCreate(MainActivity.java:51)
at android.app.Activity.performCreate(Activity.java:6975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
51 и 57 это OnBtnClick(); и btn.setOnClickListener(new View.OnClickListener() { соответственно.
Вот моя кнопка:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="@+id/imageView3"
app:layout_constraintEnd_toEndOf="@+id/imageView3"
app:layout_constraintHorizontal_bias="0.434"
app:layout_constraintStart_toStartOf="@+id/imageView3"
app:layout_constraintTop_toTopOf="@+id/imageView3"
app:layout_constraintVertical_bias="0.886" />
id проверял, менял на новый и опять вернулся к старому. Результат все тот же.
Кнопка не в выдвижном меню. Она во фрагменте.
this.btn = findViewById(R.id.button);this.btnnull. У вас либо ID в разметке не тот или не там или кнопки вообще нет или она в выдвижном меню. Если последнее - надо не так искать. Если последнее - покажите заметку. – ЮрийСПб Nov 24 '19 at 21:35