我正在尝试实施一个dialog
框,以便在单击按钮时显示。我按照一个示例来获取以下代码,因为我以前从未使用过dialogs
。我在Results
课程的2个不同地点获得NPE。我在下面的代码中评论了两个位置。
先谢谢你的帮助。
Java代码:
public class Results extends Activity {
Button detailsBtn;
final Context context = this;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.resultsmain);
detailsBtn = (Button)findViewById(R.id.detailsBtn);
detailsBtn.setText("Details");
detailsBtn.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.resultsdetailsdisplay);
dialog.setTitle("Detailssss");
TextView title = (TextView)findViewById(R.id.title);
title.setText("TITLE - TESTING"); //NULL POINTER EXCEPTION
Button close = (Button)findViewById(R.id.close);
close.setOnClickListener(new OnClickListener() { //NULL POINTER EXCEPTION
public void onClick(View arg0) {
dialog.dismiss();
}
});
}
});
}
}
resultsdetailsdisplay.xml:
<RelativeLayout
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/scroll" >
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="12sp"
android:layout_centerHorizontal="true"
android:gravity="center" />
</RelativeLayout>
LogCat输出
02-13 18:36:39.900: E/AndroidRuntime(767): java.lang.NullPointerException
02-13 18:36:39.900: E/AndroidRuntime(767): at matt.lyons.bibletrivia.Results$4.onClick(Results.java:85)
02-13 18:36:39.900: E/AndroidRuntime(767): at android.view.View.performClick(View.java:4084)
02-13 18:36:39.900: E/AndroidRuntime(767): at android.view.View$PerformClick.run(View.java:16966)
02-13 18:36:39.900: E/AndroidRuntime(767): at android.os.Handler.handleCallback(Handler.java:615)
02-13 18:36:39.900: E/AndroidRuntime(767): at android.os.Handler.dispatchMessage(Handler.java:92)
02-13 18:36:39.900: E/AndroidRuntime(767): at android.os.Looper.loop(Looper.java:137)
02-13 18:36:39.900: E/AndroidRuntime(767): at android.app.ActivityThread.main(ActivityThread.java:4745)
02-13 18:36:39.900: E/AndroidRuntime(767): at java.lang.reflect.Method.invokeNative(Native Method)
02-13 18:36:39.900: E/AndroidRuntime(767): at java.lang.reflect.Method.invoke(Method.java:511)
02-13 18:36:39.900: E/AndroidRuntime(767): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-13 18:36:39.900: E/AndroidRuntime(767): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-13 18:36:39.900: E/AndroidRuntime(767): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:3)
使用对话框对象:
TextView title = (TextView) dialog.findViewById(R.id.title);
和
Button close = (Button) dialog.findViewById(R.id.close);
根据指定here: findViewById - 查找由onCreate(Bundle)中处理的XML中的id属性标识的视图。
您的对话框在事后加载,因此只有对话框上下文知道这些视图。
答案 1 :(得分:1)
TextView tv = (TextView)dialog.findViewById(R.id.title);
Button close = (Button)dialog.findViewById(R.id.close);
在上面的xml中,您还没有创建button
。
答案 2 :(得分:0)
这两个问题都是由同一种方法findViewById(R.id.something)
引起的。由于您尝试从外部类(即OnClickListener
)引用您的视图,因此无法直接使用findViewById
。相反,你可以使用,例如,
Results.this.findViewById(R.id.title);
希望它有效!