无法在ActionBarActivity中创建alertDialog

时间:2015-07-06 08:43:26

标签: android alertdialog android-appcompat android-theme android-actionbar-compat

我的Activity扩展了ActionBarActivity。每当我尝试在其中创建AlertDialog时,会在创建对话框的行中崩溃,从而出现此错误

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

但我正在使用Appcompat主题Theme.AppCompat.Light.NoActionBar,因为我正在使用工具栏。这可能是什么原因? 这是我的活动:

import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;



public class MyActivity extends ActionBarActivity {

    Toolbar toolbar;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_comments);

        toolbar = (Toolbar)findViewById(R.id.tool_bar_comment);
        setSupportActionBar(toolbar);
                AlertDialog alertDialog;
                alertDialog = new AlertDialog.Builder(getApplicationContext()).create();
                alertDialog.setTitle("Network error");
                alertDialog.setMessage("Check network connection and try again.");
                alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        finish();
}
      });
                  alertDialog.show();


       }
  }

这是我的主要文件:

 <application
        android:name=".Networking.AppController"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

    ...



         <activity
        android:name=".MyActivity"
        android:label="@string/myactivity"
        >
 </activity>
</application>

,这是styles.xml  

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
</style>

android:theme属性添加到MainFest中的活动并没有任何帮助。

<activity
        android:name=".MyActivity"
        android:label="@string/myactivity"
        android:theme="@style/Theme.AppCompat.NoActionBar"
        >

7 个答案:

答案 0 :(得分:27)

我无法重现同样的错误。 但是,我认为问题是传递给AlertDialog.Builder构造函数的上下文。实际上,应该将活动上下文传递给它。

尝试替换此行

                alertDialog = new AlertDialog.Builder(getApplicationContext()).create();

这一个

                alertDialog = new AlertDialog.Builder(this).create();

如果能解决问题,请告诉我。

答案 1 :(得分:10)

我通过更改导入来解决了这个问题:

 android.support.v7.app.AlertDialog 

 to 

 android.app.AlertDialog

答案 2 :(得分:2)

更改

new AlertDialog.Builder(this)

new AlertDialog.Builder(MainActivity.this)

答案 3 :(得分:1)

如果您在适配器和OnBindViewHolder()方法中使用alertDialog,如下面的代码所示:

{{1}}

}

在这种情况下,新的AlertDialog.Builder(上下文)无法正常工作

所以你需要用 new AlertDialog.Builder(view.getContext())替换它。 这适合我,ty。

答案 4 :(得分:1)

可以通过传递来解决。 Activityname.this取代getApplicationContext(); 喜欢你的情况 alertDialog = new AlertDialog.Builder(MyActivity.this)).create();

答案 5 :(得分:0)

将此行添加到<application>文件

中的AndroidManifest.xml
android:theme="@style/Theme.AppCompat.Light"

答案 6 :(得分:-1)

使用AppCompatActivity而不是ActionBarActivity

public class MyActivity extends AppCompatActivity