私はAndroid 2.3.5でRuntimeExceptionを取得していますが、私はam Theme.AppCompat(res/values/themes.xml)を使用しています。これは電話です。 http://www.gsmarena.com/samsung_galaxy_y_s5360-4117.php
<!-- res/values/themes.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Styled" parent="@style/Theme.AppCompat">
<item name="actionBarStyle">@style/QueryActionBar</item>
<item name="Android:actionBarStyle">@style/QueryActionBar</item>
</style>
<style name="QueryActionBar" parent="@style/Widget.AppCompat.ActionBar">
<item name="background">@color/blueback</item>
<item name="Android:background">@color/blueback</item>
<item name="backgroundSplit">@color/blueback</item>
<item name="Android:backgroundSplit">@color/blueback</item>
</style>
</resources>
Values-v11用のファイルです。
<!-- res/values-v11/themes.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="QueryTheme" parent="@Android:style/Theme.Holo">
<!-- Any customizations for your app running on devices with Theme.Holo here -->
</style>
</resources>
これがエラーです。
Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.txt2lrn.www/com.txt2lrn.www.LandingActivity}: Java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1651)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1667)
at Android.app.ActivityThread.access$1500(ActivityThread.Java:117)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:935)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:130)
at Android.app.ActivityThread.main(ActivityThread.Java:3687)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:507)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:867)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:625)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at Android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.Java:102)
at Android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.Java:98)
at com.txt2lrn.www.LandingActivity.onCreate(LandingActivity.Java:95)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1047)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1615)
... 11 more
申し訳ありませんが、AndroidManifest.xmlにAndroid:theme = "@ style/Theme.Styled"も定義されています。
MainActivityでActionBarActivityを拡張している場合は、values-v11でも親テーマを変更する必要があります。
values-v11のstyle.xmlは - になります。
<!-- res/values-v11/themes.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="QueryTheme" parent="@style/Theme.AppCompat">
<!-- Any customizations for your app running on devices with Theme.Holo here -->
</style>
</resources>
編集:私はあなたがActionBarを使うのをやめて、 Android Design Support Libraryに含まれているAppBarレイアウトを使い始めることを勧めます
単にActionBar Compatを追加するには、あなたのアクティビティやアプリケーションは、次のようにAndroidManifest.xmlの@ style/Theme.AppCompatテーマを使用するべきです。
<activity
...
Android:theme="@style/Theme.AppCompat" />
これにより、アクションバー(またはこのテーマをアプリケーションに追加した場合はすべてのアクティビティ)にアクションバーが追加されます。
しかし、通常はアクションバーをカスタマイズする必要があります。これを行うには、 "@ style/Theme.AppCompat.Light"のように、Theme.AppCompatを親として2つのスタイルを作成する必要があります。 1つ目はapi 11> =(AndroidアクションバーにビルドがあるAndroidのバージョン)、2つ目はapi 7-10(アクションバーにビルドがない)です。
最初のスタイルを見てみましょう。これはres/values-v11/styles.xmlにあります。これは次のようになります。
<style name="Theme.Styled" parent="@style/Theme.AppCompat.Light">
<!-- Setting values in the Android namespace affects API levels 11+ -->
<item name="Android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>
<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<!-- Setting values in the Android namespace affects API levels 11+ -->
<item name="Android:background">@drawable/ab_custom_solid_styled</item>
<item name="Android:backgroundStacked"
>@drawable/ab_custom_stacked_solid_styled</item>
<item name="Android:backgroundSplit"
>@drawable/ab_custom_bottom_solid_styled</item>
</style>
そしてあなたはAPI 7-10のために同じスタイルを持っている必要があります。それはres/values/styles.xmlに配置されますが、そのAPIレベルはまだ元のAndroidのアクションバースタイルの項目を知らないので、我々はすべきですサポートライブラリで提供されているものを使用してください。 ActionBar Compatの項目は、元のAndroidと同じように定義されていますが、前面に「Android:」という部分はありません。
<style name="Theme.Styled" parent="@style/Theme.AppCompat.Light">
<!-- Setting values in the default namespace affects API levels 7-11 -->
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>
<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<!-- Setting values in the default namespace affects API levels 7-11 -->
<item name="background">@drawable/ab_custom_solid_styled</item>
<item name="backgroundStacked">@drawable/ab_custom_stacked_solid_styled</item>
<item name="backgroundSplit">@drawable/ab_custom_bottom_solid_styled</item>
</style>
10より高いAPIレベルが既にアクションバーを持っている場合でも、AppCompatスタイルを使用する必要があることに注意してください。そうでない場合は、Android 3.0以降を搭載したデバイスでAcitvityを起動するとこのエラーが発生します。
Java.lang.IllegalStateException:このアクティビティでは、Theme.AppCompatテーマ(またはその子孫)を使用する必要があります。
これはこの元の記事へのリンクです http://Android-developers.blogspot.com/2013/08/actionbarcompat-and-io-2013-app-source.html Chris Banesによって書かれました。
P.S私の英語でごめんね
Theme.styledを参照し、AppCompatテーマを使用しない別のvaluesフォルダがないことを確認してください。
すなわちvalues-v11
フォルダ
これを試して...
styles.xml
<resources>
<style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat.Light">
<item name="Android:windowNoTitle">true</item>
</style>
</resources>
AndroidManifest.xml
<activity
Android:name="com.example.Home"
Android:label="@string/app_name"
Android:theme="@style/Theme.AppCompat.Light.NoActionBar"
>
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
あなたのActivity
はActionBarActivity
を拡張しているため、AppCompat.theme
を適用する必要があります。 ActionBarActivity
からActivity
またはFragmentActivity
に変更すると、問題が解決します。
ビルド - >クリーンプロジェクトを実行するだけです。これであなたの問題は解決すると思います。
CustomAdapterクラス内で何らかのアクションが実行されたときにDialogBoxを作成しようとしたときにこのエラーが発生しました。 これはアクティビティではなくアダプタクラスでした。 36時間の努力と解決策の検討の後、私はこれを思いつきました。
CustomAdapterを呼び出しながら、Activityをパラメータとして送信します。
CustomAdapter ca = new CustomAdapter(MyActivity.this,getApplicationContext(),records);
カスタムアダプタで変数を定義します。
Activity parentActivity;
Context context;
このようにコンストラクタを呼び出します。
public CustomAdapter(Activity parentActivity,Context context,List<Record> records){
this.parentActivity=parentActivity;
this.context=context;
this.records=records;
}
そして最後に、アダプタクラス内にダイアログボックスを作成するときは、次のようにします。
AlertDialog ad = new AlertDialog.Builder(parentActivity).setTitle("Your title");
and so on..
私はこれがあなたを助けることを願っています
私のマニフェストはテーマを参照していません...それは私の知る限りではないはずです
もちろんです。 Theme.Styled
をアクティビティに魔法のように適用するものは何もありません。以下のように、あなたの活動、あるいはあなたのアプリケーション全体がTheme.Styled
を使っていることを宣言する必要があります。
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/Theme.Styled">
私の場合、私はカスタムビューにカスタムビューを追加しましたコンストラクタ
new RoomView(getAplicationContext());
正しいコンテキストはアクティビティなので、以下のように変更しました
new RoomView(getActivity());
または
new RoomView(this);
アクティビティがTheme.AppCompatを使用したにもかかわらず、Samsungデバイスでこのようなクラッシュが発生しました。根本的な原因は、Samsung側の奇妙な最適化に関連していました。
- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `Android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme
私の解決策はAndroid:launchMode="singleTask"
を削除することでした
私は自分のアプリケーションをActionBarSherlockからActionBarCompatに移行するだけです。古いテーマを次のように宣言してください。
<style name="Theme.Event" parent="Theme.AppCompat">
その後、AndroidManifest.xmlにテーマを設定します。
<application
Android:debuggable="true"
Android:name=".activity.MyApplication"
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/Theme.Event.Home"
>
私のリストビューには、ArrayAdapterを拡張するカスタムアダプタを使用しています。 listiviewで私はカスタムAlertDialogBoxとしてボタンのうちの2つのボタンを持っています。例:アクティビティのparentActivity。アダプタのコンストラクタ
public CustomAdapter(ArrayList<Contact> data, Activity parentActivity,Context context) {
super(context,R.layout.listdummy,data);
this.mContext = context;
this.parentActivity = parentActivity;
}
`MainActivtyからAdapterを呼び出す
adapter = new CustomAdapter(dataModels,MainActivity.this,this);
adapterクラスにあるurボタンの中にur alertdialogを書くようになりました
viewHolder.update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(parentActivity);
alertDialog.setTitle("Updating");
alertDialog.setCancelable(false);
LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@SuppressLint("InflateParams") final View view1 = layoutInflater.inflate(R.layout.dialog,null);
alertDialog.setView(view1);
alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
alertDialog.setPositiveButton("Update", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//ur logic
}
}
});
alertDialog.create().show();
}
});