사용자 지정 대화 상자의findViewByID로 null 반환
15844 단어 Android
다른 사람도 썼을지도 모르지만, 나는 쓸 테니, 잊지 마라.
writeLog () 이 메서드는 사용자 지정 대화 상자를 사용합니다.
MainActivity.java
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button resetLogButton;
private Button writeLogButton;
private TextView logTextView;
private int counter = 0;
private String log = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resetLogButton = (Button) findViewById(R.id.resetLogButton);
writeLogButton = (Button) findViewById(R.id.writeLogButton);
logTextView = (TextView) findViewById(R.id.logTextView);
resetLogButton.setOnClickListener(this);
writeLogButton.setOnClickListener(this);
for (int i = 0; i < 100; i++) {
addLog("Log Message " + i);
}
}
public void addLog(String str) {
log += counter + " " + str + "\n";
logTextView.setText(log);
counter++;
}
@Override
public void onClick(View v) {
if (v == resetLogButton) {
counter = 0;
log = "";
logTextView.setText(log);
} else if (v == writeLogButton) {
writeLog();
}
}
private void writeLog() {
LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
final View dialogLayout = inflater.inflate(R.layout.write_log_dialog, (ViewGroup) findViewById(R.id.layout_root));
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("書き出すログを指定");
//builder.setMessage("");
builder.setView(dialogLayout);
builder.setPositiveButton("書き出し", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
RadioGroup radioGroup = (RadioGroup) dialogLayout.findViewById(R.id.writeLogRadioGroup);
if (radioGroup.getCheckedRadioButtonId() == R.id.applicationLogRadioButton) {
//write applicationLog
Log.i("dialog","application log");
} else {
//write systemLog
Log.i("dialog","system log");
}
}
});
builder.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
}
);
builder.create().show();
}
}
다음은 사용자 정의 대화상자의 배치입니다.write_log_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp">
<RadioGroup
android:id="@+id/writeLogRadioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/applicationLogRadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="アプリケーションのログ" />
<RadioButton
android:id="@+id/systemLogRadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="システムログ" />
</RadioGroup>
</LinearLayout>
떨어진 이유는요.RadioGroup radioGroup = (RadioGroup) dialogLayout.findViewById(R.id.writeLogRadioGroup);
열다RadioGroup radioGroup = (RadioGroup) findViewById(R.id.writeLogRadioGroup);
이렇게 썼어요.또한 MainActivity와 사용자 정의 대화상자가 두 개의 레이아웃을 조작했기 때문에 어느 뷰에 속하는지 명확하게 표시하지 않았기 때문에 null을 찾지 못하고 되돌아왔습니다.
추기:
지적해 주셔서 감사합니다.
잘 이해하고 싶은 사람은 Nkzn의 댓글을 보세요.
Reference
이 문제에 관하여(사용자 지정 대화 상자의findViewByID로 null 반환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/otsuka_kohei/items/3d5076f419ce2303e7ab텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)