Android Studio 사이드바 로그인 버튼

Android Studio 사이드바 로그인 버튼

작성일 2022.11.23댓글 1건
    게시물 수정 , 삭제는 로그인 필요

사이드바에서 로그인 버튼 생성하고 메소드 작성했는데 Logcat에서 에러 발생하네요

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 com.cookandroid.sample.MainActivity.onCreate(MainActivity.java:55)











MainActivity.java

package com.cookandroid.sample;

import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.Menu;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.navigation.NavigationView;

import androidx.appcompat.app.AlertDialog;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;

import com.cookandroid.sample.databinding.ActivityMainBinding;

import java.util.zip.Inflater;

public class MainActivity extends AppCompatActivity {

private AppBarConfiguration mAppBarConfiguration;
private ActivityMainBinding binding;

TextView tvName, tvEmail;
EditText dlgEdtName, dlgEdtEmail;
TextView toastText;
Button btnLogin;
View dialogView, toastView;
Inflater inflater;
FrameLayout container;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

btnLogin = (Button) findViewById(R.id.btnLogin);


// container = (FrameLayout) findViewById(R.id.container);
// ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.dialog, container, false);




------------------55번째 줄--------------------------

btnLogin.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
dialogView = (View) View.inflate(MainActivity.this, R.layout.dialog, null);
AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
dlg.setTitle("사용자 정보 입력");
dlg.setView(dialogView);
dlg.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dlgEdtName = (EditText) dialogView.findViewById(R.id.dlgEdt1);
dlgEdtEmail = (EditText) dialogView.findViewById(R.id.dlgEdt2);

tvName.setText(dlgEdtName.getText().toString());
tvEmail.setText(dlgEdtEmail.getText().toString());
}
});
dlg.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast = new Toast(MainActivity.this);
toastView = (View) View.inflate(MainActivity.this,
R.layout.toast1, null );
toastText = (TextView) toastView.findViewById(R.id.toastText1);
toastText.setText("Canceled");
toast.setView(toastView);
toast.show();
}
});
dlg.show();
}
});

binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());

setSupportActionBar(binding.appBarMain.toolbar);
binding.appBarMain.fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = binding.drawerLayout;
NavigationView navigationView = binding.navView;
// 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_springsummer, R.id.nav_fallwinter)
.setOpenableLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
}

@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_content_main);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}


}


#android studio #android studio download #android studio 설치 #android studio koala #android studio jellyfish #android studio flutter #android studio gemini #android studio iguana #android studio copilot #android studio emulator

profile_image 익명 작성일 -

UI구현 예시로보아서는 버튼은 side menu를 구성하는 fragment내에 있을것으로 보입니다.

이를 MainActivity에서 접근하면서 문제가 됩니다.

Fragment내 버튼은 Fragment내에서 처리하면 될 것으로 보이네요.

side menu의 fragment는 펼칠시점에 inflate되면서 view가 객체로 할당되므로

단순히 MainActivity의 onCreate시점에는 접근이 안될 가능성이 높고,

둘째로는 fragment에서 제어되는 객체가 상위 activity에 저장되면서 불필요하게 메모리를 점유하게됩니다.

(fragment가 종료되면 내부 객체들은 모두 참조가 끊어지며 가비지컬렉팅을 기다리겠지만 MainActivity에 있으면 참조가 유지되면서 MainActivity와 함께함)

구조적으로도 좋은 구조는 아니죠.

문화상품권

... 이용하기: Android 기기에서 Google Play Store 앱을 열고 계정에 로그인하세요. 상단 좌측의 사이드 바 메뉴로 이동하여... 또는 "전환" 버튼을 선택하여 구글플레이 크레딧으로...

이놈의 프로세스!

... exe - Windows 사이드바 SLsvc.exe - Microsoft 소프트웨어... 네이트온 로그인아이디도 지울수있습니다. 윈도우 프로세스초기화버튼은 기본적인...