Android 试图添加textview alertdialog的空指针
我正在尝试用动态文本创建一个警报对话框。问题是我要编辑的textview处于膨胀的布局中。 我的代码最顶层是Android 试图添加textview alertdialog的空指针,android,textview,settext,Android,Textview,Settext,我正在尝试用动态文本创建一个警报对话框。问题是我要编辑的textview处于膨胀的布局中。 我的代码最顶层是 TextView tv; 所以我可以通过我班上的所有方法达到它。下面的代码片段: public class EditNameDialog extends DialogFragment { public EditNameDialog() { } @Override public Dialog onCreateDialog(Bund
TextView tv;
所以我可以通过我班上的所有方法达到它。下面的代码片段:
public class EditNameDialog extends DialogFragment {
public EditNameDialog()
{
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater factory = LayoutInflater.from(getActivity());
View textEntryView = factory.inflate(R.layout.fragment_dialog, null);
this.setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Holo_Light_Dialog);
return new AlertDialog.Builder(getActivity())
.setTitle("Skapa profil")
.setView(textEntryView)
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
}
)
.setPositiveButton(R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
}
}
).create();
}
布局文件“fragment_dialog.xml”如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/error_dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="top"
android:padding="10dp"
android:text="@string/error_connecting"
android:textSize="20sp" />
</LinearLayout>
然后当我调用我的方法时:
public void attemptLogin(View v)
{
System.err.println(tv.getText());
}
它给了我一个空指针。
我不明白为什么在textEntryView视图中找不到id error_对话框
谢谢。我看不到您的可变电视的声明,例如:
TextView tv = (TextView) findViewById(R.id.error_dialog);
如果您还没有声明它,那么您的框架(eclipse?)应该给您一个提示。那么,您是否在类的其他部分声明了它?您的问题比看起来要复杂一些。您正在丢失对小部件的引用,因为当您这样做时,视图对象没有持有正确的视图。我也有同样的问题,我花了一段时间才弄明白 我通过保持视图引用的更新并将
textView
-值的检索外包给生命周期中稍后一个名为onActivityCreated()的方法来解决这个问题
我发布了我的示例,它有一个editText和一个按钮
我的例子:
public class EnterNumberFragment extends DialogFragment implements OnClickListener{
private EditText editText = null;
private Button acceptButton = null;
private View mContentView = null;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflator= getActivity().getLayoutInflater();
mContentView = inflator.inflate(R.layout.dialog_number, null);
builder.setView(mContentView);
return builder.create();
}
@Override
public void onActivityCreated(Bundle arg0) {
super.onActivityCreated(arg0);
acceptButton = (Button) mContentView.findViewById(R.id.accept_change);
editText = (EditText) mContentView.findViewById(R.id.et_number);
acceptButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.accept_change:
String num = editText.getText().toString();
SharedPreferences sPrefs = getActivity().getSharedPreferences("PanicPrefs",0);
SharedPreferences.Editor prefEditor = sPrefs.edit();
prefEditor.putString("NumberToCall", num).commit();
dismiss();
break;
default:
break;
}
}
这方面存在的问题是:-
LayoutInflater factory = LayoutInflater.from(getActivity());
您没有活动的参考。您可以做的是传递活动上下文,然后获取活动:-
LayoutInflater工厂=LayoutInflater.from(mContext.getActivity())
或者,您可以使用以下代码:-
LayoutInflater factory = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
您在哪里使用tv=(TextView)textEntryView.findViewById(R.id.error\u对话框)
?public void attemptLogin(View v){System.err.println(tv.getText());}在同一个类中,我仍然看不到向tv
分配值的位置。这纯粹是为了调试目的,但是由于我找不到“error\u dialog”,所以我无法为它分配值。我想这样做;tv.setText(“错误”);尝试添加tv=(TextView)textEntryView.findViewById(R.id.error\u对话框)代码>查看文本入口视图=工厂。充气(R.layout.fragment\u对话框,空)代码>和运行你的应用程序。对不起,我错过了那部分。文本视图电视;是我课堂上的第一件事。好吧,我想你不会错过的,但是有时候(在写了几个小时之后),这些事情会发生(特别是如果你用texteditor写作)。你到底从哪里得到空指针异常?是在您的attemptLogin方法中,还是在尝试获取TextView(tv=…)时?如果在您的方法中设置了它,那么您的对话框已经找到,但是字符串被设置为null(如果错误设置为正确,则不可能是这种情况)。
LayoutInflater factory = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);