1

我正在使用navigation-drawereclipse 中的模板来做一个简单的 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 编程新手,如果您能推荐一些在线课程,我将不胜感激。

4

8 回答 8

2

您已经创建了一个 Fragment,因此您不能像 Activity 一样调用它。您需要用 Fragment 替换容器视图,即 FrameLayout。

getSupportFragmentManager()
  .beginTransaction()
  .replace(R.id.content_frame, new PresenceLogFragment())
  .commit();
于 2015-03-23T12:46:34.763 回答
1

您无法通过 Intent 加载片段。您必须以这种方式使用片段管理器来执行此操作:

Fragment fragment = new PresenceLogFragment(MainActivity.this);
FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction ft = fragmentManager.beginTransaction();                
            ft.replace(R.id.yourFragmentContainer, fragment).commit();
于 2015-03-23T12:50:48.003 回答
0
 have you declared this activity in your AndroidManifest.xml?  

查看您的清单,看看您是否有一个<activity>已注册您的活动的元素。如果没有,请添加一个。

看看这里:http: //developer.android.com/guide/topics/manifest/activity-element.html

于 2015-03-23T12:34:27.403 回答
0

很明显。

“您是否在 AndroidManifest.xml 中声明了此活动?”

你应该检查是否有标签。</p>

看到这个 或者这个

于 2015-03-23T12:43:44.817 回答
0

请打开清单文件并声明如下:

<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。

于 2015-03-23T12:48:12.273 回答
0
 <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();
于 2015-03-23T12:49:24.283 回答
0

您正在尝试将片段用作活动。您可以将 PresenceLogFragment 重命名为 PresenceLogActivity 并让它扩展 Activity 而不是 Fragment 或者您可以尝试将您的片段用作片段。

此外,您尝试在应用程序中使用的任何活动都需要在清单(链接)中声明

有关片段以及如何在此处使用它们的更多信息

于 2015-03-23T12:54:49.527 回答
-1
Navigation.findNavController(view).navigate(R.id.youAc)
于 2021-12-22T15:23:07.237 回答