Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 上下文和MainActivity.this是否不同?_Android_Dialog_Android Context - Fatal编程技术网

Android 上下文和MainActivity.this是否不同?

Android 上下文和MainActivity.this是否不同?,android,dialog,android-context,Android,Dialog,Android Context,在MainActivity中,Context和MainActivity是不同的吗 它们正是getApplicationContext()和main活动。这是方法中的 我问这个问题的原因是因为他们让我犯了错误 若这些是不同的,编译器并没有在代码中显示红线 直到现在我还以为是一样的 我得到了这个错误代码 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.writeweight, PID: 24595 java.l

在MainActivity中,
Context
MainActivity
是不同的吗

它们正是
getApplicationContext()
main活动。这是方法中的

我问这个问题的原因是因为他们让我犯了错误

若这些是不同的,编译器并没有在代码中显示红线

直到现在我还以为是一样的

我得到了这个错误代码

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.writeweight, PID: 24595
    java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
        at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:843)
        at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:693)
        at androidx.appcompat.app.AppCompatDialog.setContentView(AppCompatDialog.java:95)
        at androidx.appcompat.app.AlertController.installContent(AlertController.java:232)
        at androidx.appcompat.app.AlertDialog.onCreate(AlertDialog.java:279)
        at android.app.Dialog.dispatchOnCreate(Dialog.java:702)
        at android.app.Dialog.show(Dialog.java:424)
        at com.example.writeweight.MainActivity.onOptionsItemSelected(MainActivity.java:85)
        at android.app.Activity.onMenuItemSelected(Activity.java:4182)
我从
getApplicationContext()
改为
MainActivity。这个
很好地工作了

代码

请告诉我。
谢谢

getApplicationContext()
(毫不奇怪)返回应用程序上下文,同时
MainActivity。这本身就是一个活动上下文。与您的活动关联的主题将与您的应用程序不同。它们不是一回事

若这些是不同的,编译器并没有在代码中显示红线

您不会看到错误,因为请求的只是
上下文。我还没有尝试过,但您可能也可以使用
应用程序
实例,只要使用
新建AlertDialog.Builder(getApplicationContext(),/*主题资源id*/)


但是,本文中的所有示例都使用活动上下文,因此我建议您使用它。

getApplicationContext()
getActivity()
-第二个示例相当于
MainActivity。这是一个更好的样式。非常感谢!
MainActivity.class
@Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); // HERE
        builder.setTitle("SET");
        builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(),"TEST", Toast.LENGTH_SHORT).show();

            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();

        return true;
    }