无法在ActionBarActivity中创buildalertDialog

我有一个扩展ActionBarActivityActivity 。 每当我尝试在其中创build一个AlertDialog时,在创build对话框的那一行出现这个错误

 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" > 

我无法重现相同的确切的错误。 但是,我认为问题是传递给AlertDialog.Builder构造函数的上下文。 事实上,一个活动上下文应该被传递给它。

尝试replace这一行

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

与这一个

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

请让我知道这是否解决了这个问题。

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

  android.support.v7.app.AlertDialog to android.app.AlertDialog 

更改

 new AlertDialog.Builder(this) 

 new AlertDialog.Builder(MainActivity.this) 

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

 @Override public void onBindViewHolder(final UserListAdapter.ViewHolder holder, final int position) { //long click for delete the record holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { new AlertDialog.Builder(mContext) .setMessage("Are you want to delete?") .setPositiveButton("Yes",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Log.d(TAG, "onClick: yes"); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Log.d(TAG, "onClick: no"); } }) .setCancelable(false) .show(); return true; } }); 

}

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

所以你需要用新的AlertDialog.Builder(view.getContext())replace它。 这对我有用,ty。

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

将此行添加到AndroidManifest.xml文件中的<application>

 android:theme="@style/Theme.AppCompat.Light" 

使用AppCompatActivity而不是ActionBarActivity

 public class MyActivity extends AppCompatActivity