简体   繁体   English

问题与您需要与此活动一起使用Theme.AppCompat主题(或后代)与该活动一起Theme.AppCompat主题(或后代)”

[英]Issue with You need to use a Theme.AppCompat theme (or descendant) with this activity Theme.AppCompat theme (or descendant) with this activity"

I am suddenly getting this issue. 我突然遇到这个问题。 I have gone through a number of the posts on this site and others. 我浏览了该网站上的许多帖子以及其他内容。 Here are a few of the links I have visited in my attempts to understand the cause of this problem; 这是我尝试了解此问题原因的一些链接;

From what I can tell the reason for this error has been different in each of these cases. 据我所知,在每种情况下,导致此错误的原因都不同。 I have posted my logicat snippet below. 我在下面发布了我的逻辑代码段。

05-30 20:20:23.278 13996-13996/ca.rvogl.tpbcui2 E/AndroidRuntime: FATAL EXCEPTION: main
        Process: ca.rvogl.tpbcui2, PID: 13996
        java.lang.RuntimeException: Unable to start activity ComponentInfo{ca.rvogl.tpbcui2/ca.rvogl.tpbcui2.Views.BowlerActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
            at android.app.ActivityThread.-wrap12(ActivityThread.java)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:154)
            at android.app.ActivityThread.main(ActivityThread.java:6119)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
         Caused by: 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:354)
            at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:323)
            at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)
            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
            at ca.rvogl.tpbcui2.Views.BowlerActivity.onCreate(BowlerActivity.java:50)
            at android.app.Activity.performCreate(Activity.java:6679)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
            at android.app.ActivityThread.-wrap12(ActivityThread.java) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:154) 
            at android.app.ActivityThread.main(ActivityThread.java:6119) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Android Manifest Android清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ca.rvogl.tpbcui2">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="Tenpin Bowling Companion"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true">
        <activity
            android:name=".views.MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".views.BowlerActivity">
        </activity>
    </application>
</manifest>

Styles.xml Styles.xml

<resources>
        <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <!-- Customize your theme here. -->
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
        </style>
        <style name="AppTheme.NoActionBar">
            <item name="windowActionBar">false</item>
            <item name="windowNoTitle">true</item>
        </style>
       <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
       <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>

BowlerAcitivity - This where is it is failing according to Logicat. BowlerAcitivity-根据Logicat的说法,这是哪里有问题。

public class BowlerActivity extends AppCompatActivity  {

        private BowlerAdapter mAdapter;
        private List<Bowler> bowlersList = new ArrayList<>();
        private CoordinatorLayout coordinatorLayout;
        private RecyclerView recyclerView;
        private TextView noBowlersView;

        private DatabaseHelper db;

        private TextView myText;
        private String savedExtra;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_bowler);
            //Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            //setSupportActionBar(toolbar);
            //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            //getSupportActionBar().setDisplayShowHomeEnabled(true);

            savedExtra = String.valueOf(getIntent().getIntExtra("leagueId",2)); //<<<< ADDED
            myText = (TextView) findViewById(R.id.tvLeagueId);
            final String s = myText.toString();

            coordinatorLayout = findViewById(R.id.coordinator_layout);
            recyclerView = findViewById(R.id.recycler_view);
            noBowlersView = findViewById(R.id.empty_bowlers_view);

            db = new DatabaseHelper(this);

            bowlersList.addAll(db.getAllBowlers(savedExtra));

            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.add_bowler_fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    showBowlerDialog(false, null, -1);
                }
            });

            mAdapter = new BowlerAdapter(this, bowlersList);
            RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
            recyclerView.setLayoutManager(mLayoutManager);
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.addItemDecoration(new MyDividerItemDecoration(this, LinearLayoutManager.VERTICAL, 16));
            recyclerView.setAdapter(mAdapter);

            toggleEmptyBowlers();

            //On Long Click On The RecyclerView Item An Alert Dialog Is Opened With The Option To Choose Edit/Delete
            recyclerView.addOnItemTouchListener(new RecyclerTouchListener(this,
                    recyclerView, new RecyclerTouchListener.ClickListener() {
                @Override
                public void onClick(View view, final int position) {

                    //Intent myIntent = new Intent(getApplicationContext(), SeriesActivity.class);
                    //startActivity(myIntent);
                }

                @Override
                public void onLongClick(View view, int position) {
                    showActionsDialog(position);
                }
            }));
        }

        //Inserting New Bowler In The Database And Refreshing The List
        private void createBowler(String bowler, String leagueId) {
            //Inserting Bowler In The Database And Getting Newly Inserted Bowler Id
            long id = db.insertBowler(bowler, leagueId);

            //Get The Newly Inserted Bowler From The Database
            Bowler n = db.getBowler(leagueId);

            if (n != null) {
                //Adding New Bowler To The Array List At Position 0
                bowlersList.add(0, n);

                //Refreshing The List
                mAdapter.notifyDataSetChanged();

                toggleEmptyBowlers();
            }
        }

        //Updating Bowler In The Database And Updating The Item In The List By Its Position
        private void updateBowler(String name, int position) {
            Bowler n = bowlersList.get(position);

            //Updating Bowler Text
            n.setName(name);
            n.setLeagueId(savedExtra);

            //Updating The Bowler In The Database
            db.updateBowler(n);

            //Refreshing The List
            bowlersList.set(position, n);
            mAdapter.notifyItemChanged(position);

            toggleEmptyBowlers();
        }

        //Deleting Bowler From SQLite Database And Removing The Bowler Item From The List By Its Position
        private void deleteBowler(int position) {
            // deleting the note from db
            db.deleteBowler(bowlersList.get(position));

            //Removing The Bowler From The List
            bowlersList.remove(position);
            mAdapter.notifyItemRemoved(position);

            toggleEmptyBowlers();
        }

        //Opens Dialog With Edit/Delete Options
        //Edit - 0
        //Delete - 0
        private void showActionsDialog(final int position) {
            CharSequence colors[] = new CharSequence[]{"Edit", "Delete"};

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Choose option");
            builder.setItems(colors, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (which == 0) {
                        showBowlerDialog(true, bowlersList.get(position), position);
                    } else {
                        deleteBowler(position);
                    }
                }
            });
            builder.show();
        }

        //Show Alert Dialog With EditText Options to Enter/Edit A League
        //When shouldUpdate = true, It Will Automatically Display Old Bowler Name And Change The Button Text To UPDATE
        private void showBowlerDialog(final boolean shouldUpdate, final Bowler bowler, final int position) {
            LayoutInflater layoutInflaterAndroid = LayoutInflater.from(getApplicationContext());
            View view = layoutInflaterAndroid.inflate(R.layout.dialog_bowler, null);

            AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(BowlerActivity.this);
            alertDialogBuilderUserInput.setView(view);

            final EditText inputBowler = view.findViewById(R.id.etBowlerNameInput);
            myText.setText(savedExtra);
            TextView dialogTitle = view.findViewById(R.id.dialog_title);
            dialogTitle.setText(!shouldUpdate ? getString(R.string.lbl_new_bowler_title) : getString(R.string.lbl_edit_bowler_title));

            if (shouldUpdate && bowler != null) {
                inputBowler.setText(bowler.getName());
                myText.setText(bowler.getLeagueId());

            }
            alertDialogBuilderUserInput
                    .setCancelable(false)
                    .setPositiveButton(shouldUpdate ? "update" : "save", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialogBox, int id) {
                        }
                    })
                    .setNegativeButton("cancel",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialogBox, int id) {
                                    dialogBox.cancel();
                                }
                            });

            final AlertDialog alertDialog = alertDialogBuilderUserInput.create();
            alertDialog.show();

            alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    //Show Toast Message When No Text Is Entered
                    if (TextUtils.isEmpty(inputBowler.getText().toString())) {
                        Toast.makeText(BowlerActivity.this, "Enter Bowler!", Toast.LENGTH_SHORT).show();
                        return;
                    } else {
                        alertDialog.dismiss();
                    }

                    //Check If User Is Updating Bowler
                    if (shouldUpdate && bowler != null) {

                        //Updating Bowler By Its Id
                        updateBowler(inputBowler.getText().toString(), position);

                    } else {
                        //Creating New Bowler
                        createBowler(inputBowler.getText().toString(), myText.getText().toString());
                    }
                }
            });
        }

        //Toggling List And Empty Bowler View
        private void toggleEmptyBowlers() {
            //You Can Check bowlerList.size() > 0

            if (db.getBowlersCount() > 0) {
                noBowlersView.setVisibility( View.GONE);
            } else {
                noBowlersView.setVisibility( View.VISIBLE);
            }
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate( R.menu.menu_main, menu );
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();

            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }

            return super.onOptionsItemSelected( item );
        }
    }

Not sure exactly how to fix this. 不确定确切如何解决此问题。 I have gone through the articles listed above and tried the solutions that were provided without no much success. 我浏览了上面列出的文章,并尝试了所提供的解决方案,但收效甚微。 I have also tried changing the theme directly on the layout designer directly on the layout. 我还尝试过直接在布局设计器上直接在布局设计器上更改主题。 Any sort of assistance on fixing this would be appreciated. 任何解决此问题的帮助将不胜感激。

So since the comment I posted worked for you, I decided to post ehr solution here in order to give it more visibility and help other users. 因此,由于我发表的评论对您有用,因此我决定在此处发布ehr解决方案,以使其更具可见性并为其他用户提供帮助。

SOLUTION

Hou have to set the theme to your BowlerActivity in your Manifest . BowlerActivityManifest中将主题设置为BowlerActivity

<activity 
   androidd:name=".views.BowlerActivity" 
   android:theme="@style/AppTheme" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误:您需要在此活动中使用Theme.AppCompat主题(或后代) - Error: You need to use a Theme.AppCompat theme (or descendant) with this activity 在 android 中具有自定义主题的应用程序,错误:您需要在此活动中使用 Theme.AppCompat 主题(或后代) - app with custom theme in android, error: You need to use a Theme.AppCompat theme (or descendant) with this activity java.lang.IllegalStateException:您需要在此活动中使用Theme.AppCompat主题(或后代) - java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity 无法启动MainActivity-您需要在此活动中使用Theme.AppCompat主题(或后代) - Unable to start MainActivity - You need to use a Theme.AppCompat theme (or descendant) with this activity java.lang.IllegalStateException您需要在此活动中使用Theme.AppCompat主题(或后代) - java.lang.IllegalStateException You need to use a Theme.AppCompat theme (or descendant) with this activity 如何解决:IllegalStateException:您需要在此活动中使用 Theme.AppCompat 主题(或后代) - How to solve: IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity java.lang.IllegalStateException:此活动需要使用Theme.AppCompat主题(或后代) - java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity 如何解决:java.lang.IllegalStateException:您需要在此活动中使用 Theme.AppCompat 主题(或后代)? - How to resolve: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity? Robolectric:IllegalStateException:您需要在此活动中使用 Theme.AppCompat 主题(或后代) - Robolectric: IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity 定制主题android崩溃原因:java.lang.IllegalStateException:您需要在此活动中使用Theme.AppCompat主题(或后代) - Crash with custom theme android Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM