首页 > 解决方案 > 我正在尝试将工具栏菜单添加到我的应用程序,但当我登录时应用程序崩溃。我该如何解决这个问题?

问题描述

我正在尝试为我的应用程序设置一个带有菜单的工具栏,但是当我登录我的应用程序崩溃时。似乎应用程序问题出在支持操作栏中,这是我的代码,错误是:

进程:com.ianketter.onlinevoting,PID:24495 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.ianketter.onlinevoting/com.ianketter.onlinevoting.HomeActivity}:java.lang.IllegalStateException:此活动已经有一个动作酒吧提供的窗户装饰。不要在主题中请求 Window.FEATURE_SUPPORT_ACTION_BAR 并将 windowActionBar 设置为 false 以使用工具栏。在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3298) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3437) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 在 android。 app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app。ActivityThread$H.handleMessage(ActivityThread.java:2041) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main (ActivityThread.java:7386) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os .ZygoteInit.main(ZygoteInit.java:980) 原因:java.lang.IllegalStateException:此活动已经有一个由窗口装饰提供的操作栏。不要在主题中请求 Window.FEATURE_SUPPORT_ACTION_BAR 并将 windowActionBar 设置为 false 以使用工具栏。在 androidx.appcompat.app.AppCompatDelegateImpl.setSupportActionBar(AppCompatDelegateImpl.java:575) 在 androidx.appcompat.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:183) 在 com。 

家庭活动.java;

    package com.ianketter.onlinevoting;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.drawerlayout.widget.DrawerLayout;

import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.hardware.biometrics.BiometricPrompt;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.android.material.navigation.NavigationView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

public class HomeActivity extends AppCompatActivity {

    ImageView Auth,Tick;
    private DatabaseReference mref;
    String Username,Name,Email,Phone,Password,PartyName;
    public String isVote="0";
    TextView VoteNowTv,VotedTv,V2;
    DrawerLayout drawerLayout;
    NavigationView navigationView;
    Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_home);

        /*---------------------Hooks------------------------*/
        drawerLayout=findViewById(R.id.drawerlayout);
        navigationView=findViewById(R.id.nav_view);
        toolbar=findViewById(R.id.toolbar);

        /*---------------------Tool Bar------------------------*/
        setSupportActionBar(toolbar);

        /*---------------------Navigation Drawer Menu------------------------*/
        navigationView.bringToFront();
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();

        navigationView.setNavigationItemSelectedListener((NavigationView.OnNavigationItemSelectedListener) this);



        Intent i=getIntent();
        Username = i.getStringExtra("username");
        Name = i.getStringExtra("name");
        Email = i.getStringExtra("email");
        Phone = i.getStringExtra("phoneNo");
        Password = i.getStringExtra("password");
        mref= FirebaseDatabase.getInstance().getReference();

        Auth=(ImageView)findViewById(R.id.authenticate);
        Tick=(ImageView)findViewById(R.id.votedicon);
        VoteNowTv=(TextView)findViewById(R.id.votenowtv);
        VotedTv=(TextView)findViewById(R.id.votedtv);
        V2=(TextView)findViewById(R.id.v2);

        mref.child("Users").child(Phone).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                isVote=dataSnapshot.child("Vote").getValue().toString();
                PartyName=dataSnapshot.child("Party").getValue().toString();
                V2.setText("You voted for "+PartyName);
                if(isVote.equals("1"))
                {
                    Tick.setVisibility(View.VISIBLE);
                    VotedTv.setVisibility(View.VISIBLE);
                    V2.setVisibility(View.VISIBLE);
                    VoteNowTv.setVisibility(View.INVISIBLE);
                    Auth.setVisibility(View.INVISIBLE);

                }
                else
                {
                    Tick.setVisibility(View.INVISIBLE);
                    VotedTv.setVisibility(View.INVISIBLE);
                    V2.setVisibility(View.INVISIBLE);
                    VoteNowTv.setVisibility(View.VISIBLE);
                    Auth.setVisibility(View.VISIBLE);

                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });








        final Executor executor = Executors.newSingleThreadExecutor();





        final BiometricPrompt biometricPrompt = new BiometricPrompt.Builder(this)
                .setTitle("Fingerprint Authentication")
                .setSubtitle("")
                .setDescription("place you finger to vote")
                .setNegativeButton("Cancel", executor, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                }).build();

        final HomeActivity activity=this;

        Auth.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                biometricPrompt.authenticate(new CancellationSignal(), executor, new BiometricPrompt.AuthenticationCallback() {
                    @Override
                    public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
                        activity.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {

                                Intent i=new Intent(HomeActivity.this, VerifiyId.class);
                                i.putExtra("phone",Phone);
                                startActivity(i);

                                /**LoadingBar.setTitle("Please Wait");
                                LoadingBar.setMessage("Please wait while your vote is submitting in our database..");
                                LoadingBar.setCanceledOnTouchOutside(false);
                                LoadingBar.show();


                                mref.child("Users").child(Phone).child("Vote").setValue("1").addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {

                                        LoadingBar.dismiss();

                                        Tick.setVisibility(View.VISIBLE);
                                        VotedTv.setVisibility(View.VISIBLE);
                                        VoteNowTv.setVisibility(View.INVISIBLE);
                                        Auth.setVisibility(View.INVISIBLE);
                                    }
                                });**/

                            }
                        });
                    }
                });
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater=getMenuInflater();
        inflater.inflate(R.menu.menu2,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId())
        {

            case R.id.logout2:

                Intent intent=new Intent(HomeActivity.this,welcomeActivity.class);
                startActivity(intent);
                return true;

            case R.id.updatepassword2:
                Intent intent2=new Intent(HomeActivity.this,UserUpdatePassword.class);
                intent2.putExtra("phone",Phone);
                startActivity(intent2);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onBackPressed() {

    }
}

这是我的 activity_home.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/back2"
    tools:context=".HomeActivity"
    android:id="@+id/drawerlayout"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <com.google.android.material.navigation.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/nav_view"
        app:menu="@menu/main_menu"
        android:layout_gravity="start"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#7e2a90"
            android:theme="?attr/actionBarTheme"
            app:title="Toolbars"
            app:titleTextColor="#ffff"
            android:layout_marginBottom="5dp"
            app:titleMarginStart="10dp"
            />

    <TextView
        android:id="@+id/votenowtv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginLeft="20dp"
        android:padding="20dp"
        android:textAlignment="center"
        android:textColor="#ffff"
        android:textStyle="bold"
        android:textSize="20sp"
        android:visibility="invisible"
        android:text="Click here to vote now"
        android:drawableStart="@drawable/ic_arrow"
        app:drawableEndCompat="@drawable/ic_arrow" />

    <ImageView
        android:layout_below="@+id/votenowtv"
        android:id="@+id/authenticate"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:src="@drawable/voting"
        android:visibility="invisible"
        app:tint="#ffff" />

    <ImageView
        android:layout_below="@+id/votenowtv"
        android:id="@+id/votedicon"
        android:layout_centerHorizontal="true"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:visibility="invisible"
        android:src="@drawable/voted"
        app:tint="#ffff" />

    <TextView

        android:layout_below="@+id/votedicon"
        android:id="@+id/votedtv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginLeft="20dp"
        android:padding="20dp"
        android:textStyle="bold"
        android:textAlignment="center"
        android:visibility="invisible"
        android:textColor="#ffff"
        android:textSize="20sp"
        android:text="Thanks for voting!"/>
    <TextView
        android:id="@+id/v2"
        android:layout_below="@+id/votedtv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_marginRight="20dp"
        android:layout_marginLeft="20dp"
        android:textAlignment="center"
        android:textColor="#ffff"
        android:textSize="18sp"
        android:textStyle="bold"
        android:text="You"
        android:visibility="invisible"/>
    </RelativeLayout>
</androidx.drawerlayout.widget.DrawerLayout>

这是我的 main_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="navigation_view">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/home_icon"
            android:title="Home"/>

        <item android:id="@+id/updatepassword2"
            android:title="Update Password"
            android:icon="@drawable/ic_pass"
            />


        <item
            android:id="@+id/nav_settings"
            android:icon="@drawable/settings_icon"
            android:title="Settings" />
    </group>

    <item android:title="Profile">

        <menu>

            <group android:checkableBehavior="single">


                <item
                    android:id="@+id/nav_profile"
                    android:icon="@drawable/profile_icon"
                    android:title="Profile" />

                <item
                    android:id="@+id/nav_logout"
                    android:icon="@drawable/logout_icon"
                    android:title="Logout" />
            </group>
        </menu>
    </item>

    <item android:title="Communicate">

        <menu>
            <group android:checkableBehavior="single">

            <item
                android:id="@+id/nav_share"
                android:icon="@drawable/share_icon"
                android:title="Share" />

            <item
                android:id="@+id/nav_rate"
                android:icon="@drawable/rate_icon"
                android:title="Rate Us" />
            </group>
        </menu>
    </item>


</menu>

这是我的styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

我已将错误范围缩小到 setSupportActionBar(toolbar);

我已经尝试了所有可能的方法,但它似乎不起作用,请帮助我。

标签: javaandroidxmlandroid-studioandroid-layout

解决方案


推荐阅读