从单独的类调用时,Android ondraw上下文问题

时间:2014-01-14 16:15:26

标签: android nullpointerexception android-context redraw

我对这一切都不熟悉,正如你可以通过我的问题所说的那样,在阅读了我能找到的所有内容之后,我会在圈内旋转。请帮忙。

我有一个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中,我就会收到上下文错误。

1 个答案:

答案 0 :(得分:1)

把我整天带走,但感谢Correct context to use within callbacks找到答案。 @Vikram在关于回调中的上下文的一个相关问题中做得对。我的问题的答案是通过投射它来使用原始活动的上下文。

((ClassA)context).methodToCall();

其中methodToCall来自DialogCreator的onItemClick(),而不是直接调用重绘。

我永远不会想到那个演员。