Android 语境不是语境?(不启动对话框)

Android 语境不是语境?(不启动对话框),android,android-activity,android-context,Android,Android Activity,Android Context,--这可能不是问题——在修复并尝试恢复后,我现在无法通过设备复制此内容 所以我有点困惑,但这里有一些代码。我修改了代码以简化它,所以我可能有一个打字错误,但这是我看到的“要点”。但基本上在某些设备上示例1不会启动对话框,而选项2会在所有设备上启动对话框: 为什么设备/安卓版本之间存在差异 上下文是否应该不一样?我知道应用程序上下文和视图上下文是不同的。但不确定为什么这会起作用。我知道我不应该在视图中使用getApplicationContext()。。但还是有点困惑 (请注意MyTestActi

--这可能不是问题——在修复并尝试恢复后,我现在无法通过设备复制此内容

所以我有点困惑,但这里有一些代码。我修改了代码以简化它,所以我可能有一个打字错误,但这是我看到的“要点”。但基本上在某些设备上示例1不会启动对话框,而选项2会在所有设备上启动对话框:

  • 为什么设备/安卓版本之间存在差异
  • 上下文是否应该不一样?我知道应用程序上下文和视图上下文是不同的。但不确定为什么这会起作用。我知道我不应该在视图中使用
    getApplicationContext()
    。。但还是有点困惑
    (请注意MyTestActivity是MyActivity的一个子类)

    编辑:在选项#1中,MyActivity从类变量获取上下文,并使用该上下文启动对话框。 在选项2中,MyTestActivity获取上下文(应该与MyActivity相同吗?)并将其传递到showMessage中。(showMessage采用示例2中的新参数)

    示例#1

    例如#2


    答案很简单。如果不调用
    super.onCreate(savedInstanceState)
    在重写的
    onCreate()
    中,您得到的是一个垃圾,而不是
    context
    。如果调用
    super.onCreate(savedInstanceState)
    ,您会得到一个工作的
    上下文

    MyTestActivity
    上没有
    showMessage()
    ,所以我不确定为什么会编译它。有一个输入错误。。应该是MyActivty扩展活动。MyTestActivity扩展了MyActivity。MyTestActivity是MyActivity的一个子类。要重新写入。。这适用于大多数设备,但要使其适用于所有设备,我必须使用选项2..Oops,在复制/粘贴/编辑时将其删除。尽管无法重现问题,但已编辑的问题给您评分。
    ///////////////////////////////////////////
    // THIS Example works on Galaxy Nexus, but not on some other devices, such as : 
    // SAMSUNG-SGH-I997. (infuse) - this just simply does not display anything.
    
    public class MyTestActivity extends MyActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.my_layout);
            Intent i = new Intent(MyTestActivity.this, ActivityTwo.class);
            startActivityForResult(i, Constants.FROM_ACTIVITY);
        }
    
        @Override 
        public void onActivityResult(int requestCode, int resultCode, Intent data) {     
            super.onActivityResult(requestCode, resultCode, data); 
            IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, 
                       resultCode, data);
            if ((intentResult != null) && (resultCode == RESULT_OK)) {
                 playsound(SOUND_DING); // User hears this - SoundPool
                 showMessage("Test Title","Test Message"); // User does not see message
            }
        }
    }
    
    public class MyActivity extends Activity {
        private Context mContext;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mContext=this;
        }
    
        public void showMessage(String title, String message) {
            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        builder.setTitle(title);
        builder.setMessage(message)
                   .setPositiveButton(mContext.getString(R.string.ok), 
                    new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
    
                                finish();
    
                       }
                   });
        AlertDialog alert = builder.create();
        alert.show();
        }
    }
    
    /////////////////////////////////////////////////////////////
    // This works on all devices
        public class MyTestActivity extends MyActivity {
            private Context context;
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.my_layout);
                context = this;
            Intent i = new Intent(MyTestActivity.this, ActivityTwo.class);
            startActivityForResult(i, Constants.FROM_ACTIVITY);
            }
    
            @Override 
            public void onActivityResult(int requestCode, int resultCode, Intent data) {     
                super.onActivityResult(requestCode, resultCode, data); 
                IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, 
                           resultCode, data);
                if ((intentResult != null) && (resultCode == RESULT_OK)) {
                     playsound(SOUND_DING); // user hears this
                     showMessage("Test Title","Test Message", context); // user sees this
                }
            }
        }
    
        public class MyActivity extends Activity {
            private Context mContext;
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                mContext=this;
            }
    
            public void showMessage(String title, String message, Context context) {
                AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setTitle(title);
            builder.setMessage(message)
                       .setPositiveButton(context.getString(R.string.ok), 
                        new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int id) {
    
                                    finish();
    
                           }
                       });
            AlertDialog alert = builder.create();
            alert.show();
            }
        }