অ্যাকশনবারম্প্যাট: java.lang.IllegalStateException: আপনার একটি থিম ব্যবহার করতে হবে App


102

আমি অ্যানড্রয়েড ২.৩.৫ এ একটি রানটাইম এক্সপ্লেশন পাচ্ছি তবে আমি থিম.এপসকম্প্যাট (রেস / মান / থিমস.এমএমএল) ব্যবহার করছি । এটি ফোন: 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>

মানগুলি- 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

দুঃখিত লোকেরা, আমার কাছে এন্ড্রয়েড: থিম = "@ স্টাইল / থিম। স্টাইল" "অ্যান্ড্রয়েডম্যানিফেস্ট.এক্সএমএল সংজ্ঞায়িত রয়েছে।


1
আপনার প্রকাশিত রেফারেন্স না Theme.Styled?
কমনসওয়েরে

3
আপনার কাছে কি অন্য একটি মান ফোল্ডার রয়েছে যা থিমের উল্লেখ করে? স্টাইলড তবে অ্যাপকম্প্যাট থিমটি ব্যবহার করে না?
tyczj

@tyczj আমি res / মান-ভি 11 / থিমস.এমএল ফাইল যুক্ত করেছি এবং এটি থিমের উল্লেখ করে না। স্টাইলড
এজি 1

@tyczj আপনি নিজের মন্তব্যটি উত্তর হিসাবে ব্যবহার করতে পারেন কারণ এটি সাধারণ সমস্যা হতে পারে (আমিও)
ভ্যালেন্টিনো ডেল'একা

উত্তর:


96

আপনি যদি আপনার মেইনএ্যাকটিভিটিতে অ্যাকশনবার্টিভিটি প্রসারিত করেন তবে আপনাকে মূল-থিমটি মান-v11 এও পরিবর্তন করতে হবে।
সুতরাং মান-v11 এ স্টাইল.এক্সএমএল হবে -

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

সম্পাদনা: আমি আপনাকে অ্যাকশনবার ব্যবহার বন্ধ এবং অ্যান্ড্রয়েড ডিজাইন সমর্থন লাইব্রেরিতে অন্তর্ভুক্ত অ্যাপবার লেআউটটি ব্যবহার শুরু করার পরামর্শ দেব


5
দুর্দান্ত, আমি এটাকে মিস করেছি। অন্য সমস্ত -vXX ফোল্ডারগুলিও ভুলে যাবেন না, বা এটি আপনার পরীক্ষার এনভির মধ্যে ভাল কাজ করবে, কেবল একবার যদি কেউ সেই সংস্করণগুলির মধ্যে একটি ব্যবহার করে তবে আপনাকে কামড়ায়।
ফালস্ট্রো

1
ধন্যবাদ! সবেমাত্র অ্যাকশনবার অ্যাক্টিভিটি ক্রিয়াকলাপে পরিবর্তিত হয়েছে! :)
ইনয়

66

অ্যাকশনবারটি কেবল সহজভাবে সংযুক্ত করার জন্য আপনার ক্রিয়াকলাপ বা অ্যাপ্লিকেশনটির অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল এ @ স্টাইল / থিম.অ্যাপকম্প্যাট থিম ব্যবহার করা উচিত:

   <activity
        ...
        android:theme="@style/Theme.AppCompat" />

এটি অ্যাক্টিভিটিতে অ্যাকশনবার যুক্ত করবে (বা আপনি যদি এই থিমটি প্রয়োগে যুক্ত করেন তবে সমস্ত ক্রিয়াকলাপ)


তবে সাধারণত আপনাকে অ্যাকশনবারটি কাস্টমাইজ করতে হবে। এটি করার জন্য আপনাকে থিম.অ্যাপকম্প্যাট পিতামাতার সাথে দুটি স্টাইল তৈরি করতে হবে, উদাহরণস্বরূপ, "@ শৈলী / থিম.অ্যাপকম্প্যাট.লাইট"। প্রথমটি এপিআই 11> = (বিল্ড ইন অ্যান্ড্রয়েড অ্যাকশনবারের সাথে অ্যান্ড্রয়েডের সংস্করণ), দ্বিতীয় এপিআই 7-10 (অ্যাকশনবারে কোনও বিল্ড) নয়।

আসুন প্রথম শৈলী তাকান। এটি res / মান-ভি 11 / স্টাইল.এক্সএমএলে অবস্থিত হবে । এটি দেখতে এটির মতো হবে:

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

এবং আপনার 7-10-10 এপিআইয়ের জন্য একই স্টাইল থাকা দরকার। এটি রেজ / মান / স্টাইলস.এক্সএমএল এ অবস্থিত হবে তবে এপিআই স্তরগুলি মূল অ্যান্ড্রয়েড অ্যাকশনবারের শৈলী আইটেমগুলি সম্পর্কে এখনও জানে না, আমাদের সমর্থন লাইব্রেরি দ্বারা সরবরাহিত একটি ব্যবহার করা উচিত। অ্যাকশনবার কম্প্যাট আইটেমগুলি ঠিক মূল অ্যান্ড্রয়েডের মতোই সংজ্ঞায়িত করা হয় তবে "অ্যান্ড্রয়েড:" অংশ না করে সামনের অংশে:

<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 টিরও বেশি উচ্চতর ইতিমধ্যে অ্যাকশনবার থাকে তবে আপনার এখনও অ্যাপকম্প্যাট শৈলী ব্যবহার করা উচিত। যদি আপনি এটি না করেন তবে অ্যান্ড্রয়েড 3.0.০ এবং এর বেশি ডিভাইসগুলির সাথে অ্যাকটিভিটি চালু করার ক্ষেত্রে আপনার এই ত্রুটিটি থাকবে:

java.lang.IllegalStateException: আপনার এই ক্রিয়াকলাপের সাথে থিম.অ্যাপকম্প্যাট থিম (বা বংশধর) ব্যবহার করা দরকার।

ক্রিস ব্যানস লিখিত এই মূল নিবন্ধটি http://android-developers.blogspot.com/2013/08/actionbarcompat-and-io-2013-app-source.html লিঙ্ক করুন ।

আমার ইংরাজির জন্য পিএস দুঃখিত


এটি পেরেক! UPVPTED
টনি গিল

20

পরীক্ষা করে দেখুন এবং নিশ্চিত করুন যে আপনার কাছে থিম.স্টাইলযুক্ত এবং অ্যাপকম্প্যাট থিম ব্যবহার না করে এমন কোনও মান ফোল্ডার নেই make

অর্থাত্ values-v11ফোল্ডার


এটি আমার সমস্যাও ছিল। আমার একটি লাইব্রেরি প্রকল্প ছিল এবং অ্যাপকম্প্যাট-ভি 7 লাইব্রেরি আমদানি করতে হয়েছিল এবং সমস্ত থিমগুলিকে অ্যাপকম্প্যাট থিমগুলি প্রসারিত করতে হয়েছিল। জিনিসটি হ'ল, আমার মূল প্রকল্পে সরঞ্জামগুলি রয়েছে: <অ্যাপ্লিকেশন> এ <================================================================================================================================================================================== কিছু কারণে যে কাজ করে না।
স্পিডিএনমডস

16

এটা চেষ্টা কর...

styles.xml

<resources>
 <style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat.Light">
    <item name="android:windowNoTitle">true</item>
 </style>
</resources>

Andro আইডি

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

11

আপনার Activityপ্রসারিত হচ্ছে ActionBarActivityযার AppCompat.themeপ্রয়োগ হওয়া প্রয়োজন । থেকে পরিবর্তন ActionBarActivityকরতে Activityবা FragmentActivity, এটা সমস্যার সমাধান হবে।



3

আমার ম্যানিফেস্টে কোনও থিমের রেফারেন্স নেই ... এটি আফ্রিকের উচিত হবে না

অবশ্যই এটি। কোনও Theme.Styledক্রিয়াকলাপে ম্যাজিকভাবে কিছুই প্রয়োগ হচ্ছে না । আপনাকে আপনার ক্রিয়াকলাপগুলি - বা আপনার সম্পূর্ণ অ্যাপ্লিকেশন - ডিক্লেয়ার করতে হবে Theme.Styled, যেমন:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.Styled">

আমি ভুল ছিলাম, আমার অ্যান্ড্রয়েড: থিম = "@ স্টাইল / থিম। স্টাইলড" রয়েছে আমার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে (আমি এটি প্রথমবার দেখিনি)।
এজি 1

3

আমি যখন কাস্টমএডাপ্টার শ্রেণিতে কিছু ব্যবস্থা নেওয়া হয় তখন ডায়ালগবক্স তৈরি করার চেষ্টা করার সময় আমি এই ত্রুটির মুখোমুখি হয়েছি। এটি কোনও ক্রিয়াকলাপ নয়, একটি অ্যাডাপ্টার শ্রেণি ছিল। 36 ঘন্টা প্রচেষ্টা এবং সমাধানের সন্ধানের পরে, আমি এটি নিয়ে এসেছি।

কাস্টমএডাপ্টারকে কল করার সময় ক্রিয়াকলাপটিকে পরামিতি হিসাবে প্রেরণ করুন।

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

আমি আশা করি এটা আপনাকে সাহায্য করবে


2

আমি সবেমাত্র আমার অ্যাপ্লিকেশনটি অ্যাকশনবারেরলক থেকে অ্যাকশনবারকম্পেটে পাচ্ছি। আপনার পুরানো থিমটিকে এভাবে ঘোষণার চেষ্টা করুন:

<style name="Theme.Event" parent="Theme.AppCompat">

তারপরে আপনার AndroidManLive.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"
     >

2

আমি এই ধরনের দুর্ঘটনায় ছিল স্যামসাং যদিও কার্যকলাপ ব্যবহার করেনি ডিভাইসের Theme.AppCompat । মূল কারণটি স্যামসাংয়ের পক্ষ থেকে উদ্ভট অপ্টিমাইজেশনের সাথে সম্পর্কিত ছিল:

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


1
আপনি এই জন্য একটি উৎস আছে? আমি কিছুক্ষণের জন্য আমার অ্যাপ্লিকেশনটিতে একটি অনুরূপ বাগ সন্ধান করছি এবং এটি আশাব্যঞ্জক সীসার মতো শোনাচ্ছে।
দিমিত্রি ব্রেন্ট

একই অবস্থা! এই সম্পর্কে আরও ভাল লাগবে! আমি আমার অ্যাপ্লিকেশনেও অনুরূপ বাগটি সন্ধান করছি। দুর্ভাগ্যক্রমে, আমি ব্যবহার করি না android:launchMode="singleTask"
একরপো

আমি একই বিষয়টি পর্যবেক্ষণ করি। এটি গ্যালাক্সি ট্যাব এ 10.1 এর জন্য ঘটছে (অ্যান্ড্রয়েড 7.0, মূলযুক্ত নয় এবং এসএম-এ 320 এফএল (অ্যান্ড্রয়েড 7.0, মূলযুক্ত নয়) I আমি ব্যবহার করি না android:launchMode="singleTask"এবং আমার সমস্ত ক্রিয়াকলাপ অ্যাপকম্প্যাট থিম ব্যবহার করে: /
ইউজার 299090759

2

আমার ক্ষেত্রে আমি একটি কাস্টম ভিউ তৈরি করেছি আমি কাস্টম ভিউ কনস্ট্রাক্টরের সাথে যুক্ত করেছি

new RoomView(getAplicationContext());

সঠিক প্রসঙ্গটি ক্রিয়াকলাপটিকে তাই এতে পরিবর্তন করা হয়েছে:

new RoomView(getActivity());

অথবা

new RoomView(this);

1

আমার তালিকা দেখার জন্য কাস্টম অ্যাডাপ্টার ব্যবহার করছি যা অ্যারেএডাপ্টার প্রসারিত করে। লিজটিভিউতে আমার কাছে কাস্টম অ্যালার্টডায়ালগবক্স হিসাবে বোতামগুলির মধ্যে একটিতে দুটি বোতাম রয়েছে। প্রাক্তন: ক্রিয়াকলাপ পিতামাতার কার্যকলাপ; অ্যাডাপ্টারের জন্য কনস্ট্রাক্টর `

public CustomAdapter(ArrayList<Contact> data, Activity parentActivity,Context context) {
        super(context,R.layout.listdummy,data);
        this.mContext   =   context;
        this.parentActivity  =   parentActivity;
    }

Main মেইনঅ্যাক্টিটি থেকে অ্যাডাপ্টার কল করা

adapter = new CustomAdapter(dataModels,MainActivity.this,this);

অ্যাডাপ্টারের ক্লাসে থাকা ur বোতামের অভ্যন্তরে এখন আপনার urltdialog লিখুন

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();

            }
        });


-2

প্যাকেজ রিললভার ও মিউ সমস্যা, ইইউ অ্যাপেনস অ্যাডিসিওনাই ন মিনহা মেইনএকটিভিটি ("থিম = আমার সমস্যা সমাধানের জন্য, আমি এটি কেবল আমার মেইনএকটিভিটিতে (" থিম = "@ স্টাইল / মাই থেম" ") যুক্ত করেছি যেখানে মাই থিমটি আমার থিমের নাম is

[Activity(Label = "Name Label", MainLauncher = true, Icon = "@drawable/icon", LaunchMode = LaunchMode.SingleTop, Theme = "@style/MyTheme")]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.