【问题标题】:Android ondraw context issue when called from separate class从单独的类调用时的Android ondraw上下文问题
【发布时间】:2014-02-02 19:05:37
【问题描述】:

我对这一切都很陌生,正如您可能从我的问题中看出的那样,在阅读了我能找到的所有内容后,我变得非常迷茫。请帮忙。

我有一个 ClassA,其中包含一个扩展视图的内部 ViewClass。从 ClassA 中,我调用 DialogCreator 类来扩展 ClassA 并显示一个对话框。从对话框列表视图中,您可以选择需要 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;
}
}

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 不会尝试设置内容视图...它会调用 ClassA 中的一个方法来尝试设置它。两者都失败了。

我尝试将活动传递给 DialogCreator,我尝试使用两个类中的 getXcontext()。我什至尝试在 ClassA 中粘贴一个从使用 ClassA 上下文的 DialogCreator 类调用的方法。显然,我在某处缺少对上下文的非常重要的理解。我尝试定义上下文的每一种方式,都会因以下 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 中,就会出现上下文错误。

【问题讨论】:

  • 你能出示你的ClassA代码吗?

标签: android nullpointerexception android-context redraw


【解决方案1】:

花了我一整天,但感谢Correct context to use within callbacks 找到了答案。 @Vikram 在关于回调上下文的一些相关问题中说得对。我的问题的答案是通过强制转换来使用原始 Activity 的上下文。

((ClassA)context).methodToCall();

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

我永远也想不通那个选角。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2017-07-29
    相关资源
    最近更新 更多