DialogFragment - 访问布局组件的位置[即editText.setText(“”)]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DialogFragment - 访问布局组件的位置[即editText.setText(“”)]相关的知识,希望对你有一定的参考价值。
经过大量的研究和尝试(我认为)我能找到的每一种生命周期方法,我真的被卡住了:
我想要的:基本上我有这个DialogFragment(“ProfileUsernameDialogFragment”),它应该呈现我的布局文件(“fragment_profile_header_username_dialog”)。在这个布局文件中我有一些TextViews和一些EditTexts。我想将这些EditTexts的文本设置为我在程序中获得的某个值,因此无法预先设置它。
是)我有的:
public class ProfileUsernameDialogFragment extends DialogFragment {
...
@Override
public void onActivityCreated(Bundle savedInstanceState) {
EditText usernameText = (EditText) this.getView().findViewById(R.id.username_field);
usernameText.setText("TEST");
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Log.d(AppController.LOG_STRING, this.getClass().toString() + " - onCreateDialog - START");
AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity());
View view = this.getActivity().getLayoutInflater().inflate(R.layout.fragment_profile_header_username_dialog, null);
builder.setView(view);
builder.setPositiveButton(SAVE_SETTINGS, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
// Tried this too:
// EditText usernameText = (EditText)
// ProfileUsernameDialogFragment.this.getView().findViewById(R.id.forename_label);
// usernameText.setText("TEST");
}
});
builder.setNegativeButton(ABORT_ACTION, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
});
builder.setTitle(CHANGE_NAME_SETTINGS);
Dialog dialog = builder.create();
return dialog;
}
}
我得到的:是一个NullPointerException,无论我尝试的findViewById(R.id.username_field)是哪个位置。 (我也试过onCreate和其他一些方法,我开始认为我可能有另一个问题,而不是代码位置,但我真的没有任何线索)我试图在DialogFragments中至少跟踪6个关于NullPointers的类似问题,所以我想我需要高级帮助^^
我应该添加我对android的全新,所以请保持良好,但非常欢迎会议tipps等! thx提前:)
以下是您的需求:
mAlertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(final DialogInterface dialog) {
final Button b = mAlertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
v.findViewById(R.id...)
}
});
}
});
});
}
});
除了@ David的答案之外,另一个选择是使用onStart()方法。
除了使用onActivityCreated()方法之外,您的问题似乎正在考虑这些问题。
例如:
@Override
public void onStart()
{
super.onStart();
EditText usernameText = (EditText) this.getDialog().findViewById(R.id.username_field);
usernameText.setText("TEST");
}
Android文档有很好的example
所以,如果你不在你的布局中设置文本你需要在onCreateView()
方法中设置它,例如:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup cont,
Bundle savedInstanceState) {
// Inflate the layout to use as dialog or embedded fragment
View view = inflater.inflate(R.layout.app_info, cont, false);
TextView title = (TextView)view.findViewById(R.id.dialog_header);
TextView content = (TextView)view.findViewById(R.id.dialog_content);
Button button = (Button)view.findViewById(R.id.dialog_button);
title.setText(this.dialogTitle);
content.setText(this.dialogContent);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
getDialog().dismiss();
}
});
return view;
}
以上是关于DialogFragment - 访问布局组件的位置[即editText.setText(“”)]的主要内容,如果未能解决你的问题,请参考以下文章
DialogFragment OnCreateView与OnCreateDialog的自定义布局
DialogFragment OnCreateView 与 OnCreateDialog 的自定义布局
DialogFragment 中的 Kotlin 合成和自定义布局
使用 DialogFragment 从布局 xml 调用方法。它是如何工作的?
java 如果您想让DialogFragment具有嵌入能力,则必须在布局中定义对话框的UI,然后在onCreateView()回调中加载布局。
java 如果您想让DialogFragment具有嵌入能力,则必须在布局中定义对话框的UI,然后在onCreateView()回调中加载布局。