错误:您是不是在 AndroidManifest.xml 中声明了此活动?尝试上课时

Posted

技术标签:

【中文标题】错误:您是不是在 AndroidManifest.xml 中声明了此活动?尝试上课时【英文标题】:Error: have you declared this activity in your AndroidManifest.xml? when trying to intent a class错误:您是否在 AndroidManifest.xml 中声明了此活动?尝试上课时 【发布时间】:2021-12-02 12:09:49 【问题描述】:

这是我在班级 showInforActivity 中单击按钮的代码:

btnRegister.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View v) 
                    Intent intent = new Intent(showInfoActivity.this, InformationFragment.class);
                    startActivity(intent);
                
            );

每当我单击按钮时,我都会收到错误Unable to find explicit activity class com.example.drawerapplication/com.example.drawerapplication.ui.information.InformationFragment; have you declared this activity in your androidManifest.xml?,它会加载以前的类和布局,而不是加载这个 InformationFragment 类:

package com.example.drawerapplication.ui.information;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import com.example.drawerapplication.databinding.FragmentInformationBinding;

public class InformationFragment extends Fragment 

    private FragmentInformationBinding binding;

    private EditText name, address, age, contact;
    private Button btnAdd, btnViewData;
    DatabaseHelper mDatabaseHelper;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) 
        binding = FragmentInformationBinding.inflate(inflater, container, false);
        View root = binding.getRoot();

        name = binding.name;
        address = binding.address;
        age = binding.age;
        contact = binding.contact;

        btnAdd = binding.add;
        btnViewData = binding.viewdata;

        mDatabaseHelper = new DatabaseHelper(getActivity());

        btnAdd.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 

                if (name.length() != 0 && address.length() != 0
                && age.length() != 0 && contact.length() != 0)

                    mDatabaseHelper.addData(name.getText().toString(), address.getText().toString(),
                            age.getText().toString().trim(), Long.valueOf(contact.getText().toString().trim()));
                    toastMessages("Data Successfully Inserted!");

                else 
                    toastMessages("Please complete all the requirements needed");
                

            
        );

        btnViewData.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                Intent intent = new Intent(getContext(), ListDataActivity.class);
                startActivity(intent);
            
        );

        return root;
    

    @Override
    public void onDestroyView() 
        super.onDestroyView();
        binding = null;
    

    private void toastMessages(String message)
        Toast.makeText(getContext(),message,Toast.LENGTH_SHORT).show();
    


这个InformationFragment的布局是fragment_information

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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_
    android:layout_
    android:orientation="vertical"
    tools:context=".ui.information.InformationFragment"
    android:layout_marginStart="10dp"
    android:layout_marginEnd="10dp">
...

这是我的 **AndroidManifest 文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.drawerapplication">

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.DrawerApplication">
        <activity android:name=".ui.information.ListDataActivity"/>
        <activity android:name=".ui.information.showInfoActivity"/>
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:label="@string/app_name"
            android:theme="@style/Theme.DrawerApplication.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity> 
    </application>

</manifest>

我尝试在那里添加InformationFragment,但它显示Class referenced in the manifest, com.example.drawerapplication.InformationFragment, was not found in the project or the libraries

如果您需要更多信息,请告诉我我遗漏了什么。谢谢!

【问题讨论】:

【参考方案1】:

您不能像使用Activity 那样使用Intent 来启动/创建FragmentFragment 实际上存在于 Activity 中,即它的生命周期绑定到 Activity。要启动Fragment,您必须使用Activity 实例提供的FragmentManager

出现此错误是因为 Android 认为您的 InformationFragmentActivity 而不是 Fragment,因此它会询问您是否已在 AndroidManifest.xml 文件中声明它,因为正如规则所说,您需要在 AndroidManifest.xml 文件中声明应用程序中的每个 Activity

所以,现在您可以在 showInfoActivity 中使用 this 之类的内容。从技术上讲,有很多解决方案可以用来解决您本质上可以做什么,这就是为什么我将您链接到所有可能的解决方案,而不是仅仅在这里写它们

【讨论】:

谢谢!我不知道这一点,该链接非常有帮助!我设法将 Intent 行替换为getSupportFragmentManager().beginTransaction() 但是,它给了我一个No view found for id 0x7f080207 (com.example.drawerapplication:id/infoFrameLayout) for fragment InformationFragment 的错误。 您是否声明了任何以infoFrameLayout 为id 的视图?如果对您有帮助,也将答案标记为已接受 我能够让它工作。我只是在调用不正确的布局。再次感谢您! 很高兴,我能帮上忙!【参考方案2】:

您不能使用IntentActivity 导航到Fragment。 因此,您会收到此错误。如,Intent 接收 2 个参数 Intent(FromActivity, ToActivity.class) 。您在第二个参数中使用片段。我们知道,当我们创建一个活动时,它使用AndroidManifest.xml 文件声明。在这里,在您的清单文件中没有任何名为 InformationFragment 的活动。

您可以学习 Android Navigation Component 以轻松与 Activity 和 Fragment 进行通信。

【讨论】:

以上是关于错误:您是不是在 AndroidManifest.xml 中声明了此活动?尝试上课时的主要内容,如果未能解决你的问题,请参考以下文章

找不到明确的活动类。您是不是在 AndroidManifest.xml 中声明了此活动

找不到明确的活动类 ;您是不是在 AndroidManifest.xml 中声明了此活动

AdMob 错误“您必须在 androidmanifest.xml 中使用 configchanges 声明 adactivity”

您应用的 AndroidManifest.xml 中的必需元数据标记不存在。

Google 地图 - 您应用的 AndroidManifest.xml 中的必需元数据标签不存在

错误:必须在 AndroidManifest.xml 中设置有效的 Facebook 应用程序 ID