Java 由于IllegalStateException,警报对话框未显示
当我单击任何列表视图行时,它不会显示警报对话框,而是显示一个非法状态异常。 它说使用主题。AppCompat主题。我对此不太了解,而且我是新来的。请任何人帮助我了解所有这些appcompat活动以及出现此问题的原因Java 由于IllegalStateException,警报对话框未显示,java,android,Java,Android,当我单击任何列表视图行时,它不会显示警报对话框,而是显示一个非法状态异常。 它说使用主题。AppCompat主题。我对此不太了解,而且我是新来的。请任何人帮助我了解所有这些appcompat活动以及出现此问题的原因 java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. at android.supp
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:355)
at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:324)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:285)
at android.support.v7.app.AppCompatDialog.setContentView(AppCompatDialog.java:83)
at android.support.v7.app.AlertController.installContent(AlertController.java:225)
at android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:257)
at android.app.Dialog.dispatchOnCreate(Dialog.java:397)
at android.app.Dialog.show(Dialog.java:298)
at com.example.stark.messenger.showDatabase$1.onItemClick(showDatabase.java:93)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3081)
at android.widget.AbsListView$3.run(AbsListView.java:3947)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
我的主要活动代码是:
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
public class showDatabase extends AppCompatActivity {
SQLiteOpenHelper expensedatabase;
SQLiteDatabase db;
Cursor cursor;
ListView lv;
ArrayList<DataModel> dataModels;
private static CustomAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_database);
lv=(ListView) findViewById(R.id.lv_custom_list);
expensedatabase = new ExpenseDatabase(this);
db = expensedatabase.getReadableDatabase();
}
protected void onStart()
{
super.onStart();
dataModels = new ArrayList<DataModel>();
dataModels.clear();
cursor = db.rawQuery("select * from ExpenseRecord where strftime('%Y-%m', DATE) = '2017-04';",null);
if (cursor != null && cursor.getCount() != 0) {
if (cursor.moveToFirst()) {
do {
DataModel datamodelItems = new DataModel();
datamodelItems.setPayee(cursor.getString(cursor
.getColumnIndex("PAYEE")));
datamodelItems.setAmount(cursor.getString(cursor
.getColumnIndex("AMOUNT")));
datamodelItems.setCategory(cursor.getString(cursor
.getColumnIndex("CATEGORY")));
datamodelItems.setNotes(cursor.getString(cursor
.getColumnIndex("NOTES")));
datamodelItems.setDate(cursor.getString(cursor
.getColumnIndex("DATE")));
datamodelItems.setTime(cursor.getString(cursor
.getColumnIndex("TIME")));
dataModels.add(datamodelItems);
} while (cursor.moveToNext());
}
}
cursor.close();
CustomAdapter customadapter = new CustomAdapter(dataModels,getApplicationContext());
lv.setAdapter(customadapter);
lv.setOnItemClickListener(itemlistener);
}
AdapterView.OnItemClickListener itemlistener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(getApplicationContext());
builder.setView(R.layout.dialog_box)
.setPositiveButton("Update", new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface dialog, final int id) {
//update click
}
})
.setNeutralButton("Disable", new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface dialog, final int id) {
//disable click
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface dialog, final int id) {
//cancel click
}
});
if(position>-1) {
android.support.v7.app.AlertDialog alert = builder.create();
alert.show();
}
}
};
public void onDestroy(){
super.onDestroy();
cursor.close();
db.close();
}
导入android.content.DialogInterface;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ListView;
导入java.util.ArrayList;
公共类showDatabase扩展了AppCompatActivity{
SQLiteOpenHelper数据库;
sqlitedb数据库;
光标;
ListView lv;
ArrayList数据模型;
专用静态适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u show\u数据库);
lv=(ListView)findViewById(R.id.lv\u自定义\u列表);
expensedatabase=新的expensedatabase(本);
db=expensedatabase.getReadableDatabase();
}
受保护的void onStart()
{
super.onStart();
dataModels=新的ArrayList();
dataModels.clear();
cursor=db.rawQuery(“从ExpenseRecord中选择*,其中strftime(“%Y-%m”,日期)='2017-04';”,null);
if(cursor!=null&&cursor.getCount()!=0){
if(cursor.moveToFirst()){
做{
DataModel datamodelItems=新的DataModel();
datamodelItems.setPayee(游标)getString(游标
.getColumnIndex(“收款人”);
datamodelItems.setAmount(游标)getString(游标
.getColumnIndex(“金额”);
datamodelItems.setCategory(游标)getString(游标
.getColumnIndex(“类别”);
datamodelItems.setNotes(游标.getString(游标
.getColumnIndex(附注);
datamodelItems.setDate(游标)getString(游标
.getColumnIndex(“日期”);
datamodelItems.setTime(游标)getString(游标
.getColumnIndex(“时间”);
添加(datamodelItems);
}while(cursor.moveToNext());
}
}
cursor.close();
CustomAdapter CustomAdapter=新的CustomAdapter(dataModels,getApplicationContext());
lv.setAdapter(自定义适配器);
lv.setOnItemClickListener(itemlistener);
}
AdapterView.OnItemClickListener itemlistener=新AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
final android.support.v7.app.AlertDialog.Builder=新的android.support.v7.app.AlertDialog.Builder(getApplicationContext());
builder.setView(R.layout.dialog\u框)
.setPositiveButton(“更新”,新的DialogInterface.OnClickListener(){
public void onClick(最终对话框接口对话框,最终int id){
//更新点击
}
})
.setNeutralButton(“禁用”,新建DialogInterface.OnClickListener(){
public void onClick(最终对话框接口对话框,最终int id){
//禁用单击
}
})
.setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
public void onClick(最终对话框接口对话框,最终int id){
//取消单击
}
});
如果(位置>-1){
android.support.v7.app.AlertDialog alert=builder.create();
alert.show();
}
}
};
公共空间{
super.ondestory();
cursor.close();
db.close();
}
}尝试添加
android:theme="@style/Theme.AppCompat.Light"
指向AndroidManifest.xml文件中的应用程序标记
正如本文所建议的
太棒了,你能选择它作为解决方案吗?