我对这一切都不熟悉,正如你可以通过我的问题所说的那样,在阅读了我能找到的所有内容之后,我会在圈内旋转。请帮忙。
我有一个ClassA,它包含一个扩展视图的内部ViewClass。在ClassA中,我调用了扩展ClassA的DialogCreator类并显示了一个对话框。从对话框列表视图中,您可以选择需要重新绘制ViewClass的项目。无论我如何发送上下文,我都会得到一个空指针上下文错误。
ClassA构造函数:
public class ClassA extends Basclass{ // Baseclass extends Activity
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
}
ClassA相关代码:
// Coming in from Menu for deleting or changing database tables
DialogCreator dc = new DialogCreator(context, id);
dc.onCreateDialog(title, list, mode);
protected class ViewClass extends View{
// Constructor
public ViewClass(Context context){
super(context); // Mainly crashes HERE
}
// Initializes rects, then draws via an OnDraw method
}
DialogCreator构造函数:
public class DialogCreator extends ClassA {
DialogCreator(Context context, int dialogID){
this.context = context;
this.dialogID = dialogID;
}
}
Inside DialogCreator:
protected Dialog onCreateDialog(String title, final ArrayList list, final String mode) {
// build alertdialog listView
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// User choices, etc...
ViewClass v = new ViewClass(context);
setContentView(v);
}
}
Alternate OnCreateDialog不会尝试setContentView ...它会调用ClassA中尝试设置它的方法。两者都失败了。
我已经尝试将活动传递给DialogCreator,我尝试使用两个类中的getXcontext()。我甚至试图在从使用ClassA上下文的DialogCreator类调用的ClassA中粘贴一个方法。显然,我错过了对某个地方非常重要的理解。我试图定义上下文的每一种方式,我崩溃与下面的LogCat类似的错误:
FATAL EXCEPTION: main
java.lang.NullPointerException
at android.app.Activity.startActivityForResult(Activity.java:3351)
at android.app.Activity.startActivityForResult(Activity.java:3312)
at android.app.Activity.startActivity(Activity.java:3522)
at android.app.Activity.startActivity(Activity.java:3490)
我很感激能够朝着正确的方向发展。
如果我将所有代码保存在ClassA中,那么一切都很完美。一旦我将调用重新移动到DialogCreator中,我就会收到上下文错误。
答案 0 :(得分:1)
把我整天带走,但感谢Correct context to use within callbacks找到答案。 @Vikram在关于回调中的上下文的一个相关问题中做得对。我的问题的答案是通过投射它来使用原始活动的上下文。
((ClassA)context).methodToCall();
其中methodToCall来自DialogCreator的onItemClick(),而不是直接调用重绘。
我永远不会想到那个演员。