Android中的“找不到活动”
Posted
技术标签:
【中文标题】Android中的“找不到活动”【英文标题】:"Activity not found" in Android 【发布时间】:2015-05-26 10:41:52 【问题描述】:我在eclipse中使用navigation-drawer
模板做一个简单的android应用。
我在片段方面遇到了一些麻烦。
我在清单中声明了一个名为 PresenceLog Fragment 的片段,但是当我在 MainActivity
中调用它时,日志仍然显示
03-23 13:54:50.817: E/AndroidRuntime(16750): android.content.ActivityNotFoundException: Unable to find explicit activity class com.singtel.ricecooker/com.singtel.ricecooker.PresenceLogFragment; have you declared this activity in your AndroidManifest.xml?
这是我的清单
这是我的片段类
public class PresenceLogFragment extends Fragment
private TextView myText = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
return inflater.inflate(R.layout.presence_log, null);
@Override
public void onViewCreated(View view, Bundle savedInstanceState)
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
ArrayList<String> userList = null;
RiceServerRequest newRequest = new RiceServerRequest();
//newRequest.getRequestInfo(this);
public void updateUserList(ArrayList<String> userList)
LinearLayout lView = (LinearLayout) getView().findViewById (R.layout.presence_log);
//LinearLayout ll = (LinearLayout)fragment.getView().findViewById(R.id.commentFragmentLayout);
for (int i = 0; i < userList.size();i++)
myText = new TextView(getActivity());
myText.setText(userList.get(i));
lView.addView(myText);
//setContentView(lView);
这是我的 MainActivity
private void launchPresenceLog()
Intent intent = new Intent(this,PresenceLogFragment.class);
startActivity(intent);
如果您知道我的代码有什么问题,那就太好了。另外,由于我是 Android 编程新手,如果您能推荐一些在线课程,我将不胜感激。
【问题讨论】:
您没有在清单文件中添加添加的活动 课程:udacity.com/course/ud853 @ashutiwari4 他正在尝试使用 INTENT 作为 ACTIVITY 来启动 FRAGMENT。这是完全错误的,参考developer.android.com/training/basics/fragments/creating.html @LittleChild 谢谢推荐,不胜感激 @EpicPandaForce 是的,我刚刚意识到这一点。我想把之前写的Activity改成Fragment,忘记改这部分了。另外,你知道 setContentView for Fragment 的等价物是什么吗(我想在向服务器请求信息时更新页面)? 【参考方案1】:您已经创建了一个 Fragment,因此您不能像 Activity 一样调用它。 你需要用你的 Fragment 替换一个容器视图,正确的 FrameLayout。
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, new PresenceLogFragment())
.commit();
【讨论】:
【参考方案2】:您不能通过 Intent 加载片段。您必须以这种方式使用片段管理器:
Fragment fragment = new PresenceLogFragment(MainActivity.this);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.yourFragmentContainer, fragment).commit();
【讨论】:
【参考方案3】:have you declared this activity in your AndroidManifest.xml?
查看您的清单,看看您是否有一个 <activity>
元素已注册您的活动。如果没有,请添加一个。
看看这里:http://developer.android.com/guide/topics/manifest/activity-element.html
【讨论】:
【参考方案4】:很清楚。
“您是否在 AndroidManifest.xml 中声明了此活动?”
你应该检查是否有标签。
see this 或maybe this
【讨论】:
【参考方案5】:请打开清单文件并声明如下:
<activity
android:name=".MainActivity" //your activity name
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
如果这是您的 lauch 活动,则执行此操作,否则执行此操作
<activity
android:name=".MainActivity"//your activity name
android:label="@string/app_name" >
</activity>
键入扩展 Activity 而不是 Fargment 的 java 文件的名称。表示从该 Activity java 文件创建的 Fragment。
【讨论】:
【参考方案6】: <activity
android:name="com.singtel.ricecooker.PresenceLogFragment"
android:label="@string/app_name" >
</activity>
如果 com.singtel.ricecooker.PresenceLogFragment 代表一个活动,并且如果它是一个片段,那么在你的清单文件中添加它,那么你做错了。在第二种情况下使用下面的代码,
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, new PresenceLogFragment())
.commit();
【讨论】:
【参考方案7】:您正在尝试将片段用作活动。 您可以将 PresenceLogFragment 重命名为 PresenceLogActivity 并让它扩展 Activity 而不是 Fragment 或者您可以尝试将您的片段用作片段。
此外,您尝试在应用中使用的任何活动都需要在清单中声明 (link)
更多关于片段以及如何使用它们here
【讨论】:
【参考方案8】:Navigation.findNavController(view).navigate(R.id.youAc)
【讨论】:
以上是关于Android中的“找不到活动”的主要内容,如果未能解决你的问题,请参考以下文章