使用Intent启动片段

时间:2015-07-10 06:15:38

标签: android android-fragments

我有一个登录页面占据屏幕的前半部分,其中包含2 EditText字段,用于电子邮件和密码以及Button。下半部分包含一个ListFragment公共项目。如果用户成功登录,则新的Activity应该开始包含与MainActivity相同但只有不同数据的Fragment - 用户创建的项目。我已成功完成MainActivity,但用户登录后的下一个活动无法启动。例外:

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.amangrover.finalapp1/com.example.amangrover.finalapp1.ProjectListFragment}; have you declared this activity in your AndroidManifest.xml?

private_projects_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

<fragment
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    class="com.example.amangrover.finalapp1.ProjectListFragment"
    android:id="@+id/privateProjectFragment"/>

</LinearLayout>

ProjectListFragment.java:

public class ProjectListFragment extends ListFragment{
String[] projectTitle;
String[] projectImage;

CustomAdapter adapter;

private List<RowItem> rowItems;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    return inflater.inflate(R.layout.list_fragment, null, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Bundle args = getActivity().getIntent().getExtras();
    projectTitle = args.getStringArray("projectTitle");
    projectImage = args.getStringArray("imageId");

    rowItems = new ArrayList<RowItem>();

    for(int i=0; i<projectTitle.length; i++) {
        RowItem item = new RowItem(projectTitle[i], 0);
        rowItems.add(item);
    }
    adapter = new CustomAdapter(getActivity(), rowItems);
    setListAdapter(adapter);
  }
}

我正在使用CustomAdapter和此列表。虽然现在我知道ProjectListFragment.java不是一个活动,所以它不能从意图开始。那么我怎样才能实现我的目标呢?

1 个答案:

答案 0 :(得分:2)

ProjectListFragment.java 是一个片段,因此您无法使用意图来启动片段事务。我能想到的唯一解决方案是创建一个新的Activity,其布局中的框架布局充当片段容器。

然后使用intent您可以启动该活动,并且在该活动的 onCreate 中,您可以使用片段事务显示片段(将片段附加到您的活动,因为片段是活动的一部分。不能是单独打开)。所以这样你就可以达到你想要的效果。

有关更清晰的提示,请参阅THIS EXAMPLETHIS EXAMPLE