错误:您是不是在 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
来启动/创建Fragment
。 Fragment
实际上存在于 Activity
中,即它的生命周期绑定到 Activity
。要启动Fragment
,您必须使用Activity
实例提供的FragmentManager
出现此错误是因为 Android 认为您的 InformationFragment
是 Activity
而不是 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】:
您不能使用Intent
从Activity
导航到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 中的必需元数据标记不存在。