从片段中调用活动

时间:2016-05-05 09:20:36

标签: android android-fragments

如果这是一个愚蠢的问题,请道歉。我已经搜索了我的问题的答案,虽然我已经找到了几个提到这个问题,但提出的解决方案都没有解决我的问题。 在我的应用程序中,我从片段调用一个Activity,然后我想通过Activity中的按钮单击返回到Fragment。 1 - 在片段Discover_Fragment中我有一个列表视图,当按下一个项目时,Activity EditThoughts开始:

 lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                                    int position, long arg3) {
                Intent intent1 = new Intent(getActivity(), EditThought.class);
                startActivity(intent1);
            }
        });

活动EditThoughts开始没有问题。 2 - 然后,当我想从Activity EditThought返回Fragment(Discover_Fragment)时,我使用以下内容:

                    FragmentManager fragmentManager = getSupportFragmentManager();
                    Discover_Fragment fragmentS1 = new Discover_Fragment();
                    fragmentManager.beginTransaction()
                            .replace(R.id.containerView, fragmentS1)
                            .commit();

我收到错误:

java.lang.IllegalArgumentException: No view found for id 0x7f0e006e (com.appleia.vocapp:id/containerView) for fragment Discover_Fragment{f1e7d01 #0 id=0x7f0e006e}

R.id.containerView是activity_main中的FrameLayout的id:

       <FrameLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/containerView">
       </FrameLayout>

Discover_Fragment的布局是:

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

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/toplayout"
    android:orientation="horizontal"

    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/topButtons"
        android:gravity="center"
        android:layout_weight="1">


        <com.appleia.SegmentedButtons.SegmentedRadioGroup
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dip"
            android:orientation="horizontal"
            android:id="@+id/segment_text"
            android:checkedButton="@+id/button_one"
            android:gravity="center">
            <RadioButton android:id="@id/button_one"
                android:layout_height="wrap_content"
                android:layout_width="110dp"
                android:minWidth="110dp"
                android:minHeight="33dip"
                android:text="@string/Articles"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:button="@null"
                android:gravity="center"
                android:textColor="@drawable/radio_colors" />
            <RadioButton android:id="@+id/button_two"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:minWidth="0dp"
                android:minHeight="33dip"
                android:text="Two"
                android:button="@null"
                android:gravity="center"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textColor="@drawable/radio_colors"
                android:visibility="gone"/>
            <RadioButton android:id="@+id/button_three"
                android:layout_height="wrap_content"
                android:layout_width="110dp"
                android:minWidth="110dp"
                android:minHeight="33dip"
                android:text="@string/Toughts"
                android:button="@null"
                android:gravity="center"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textColor="@drawable/radio_colors" />
        </com.appleia.SegmentedButtons.SegmentedRadioGroup>

    </LinearLayout>

</LinearLayout>
<ListView
    android:layout_below="@+id/toplayout"
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>

</RelativeLayout>

我做错了什么? 提前谢谢。

4 个答案:

答案 0 :(得分:1)

您可以通过致电startActivityForResult (Intent intent, int requestCode) docs here来启动活动。 之后,您可以使用onBackPressed返回活动。如果要将任何数据传递回Activity,则可以使用setResult (int resultCode, Intent data)函数。 More information is here

请注意,如果您想将数据恢复到Activity类,那么您应该致电getActivity().startActivityForResult (Intent intent, int requestCode)

或者,如果您需要将数据返回到片段类本身,请使用startActivityForResult (Intent intent, int requestCode)。它将返回到该片段中的onActivityResult

答案 1 :(得分:0)

这样做......

FragmentManager fragmentManager = getSupportFragmentManager();
                    Discover_Fragment fragmentS1 = new Discover_Fragment();
                    fragmentManager.beginTransaction()
                            .replace(R.id.containerView, fragmentS1).addToBackStack("fragBack");
                            .commit();

addToBackStack的说明 - 将此事务添加到后台堆栈。这意味着事务将在提交后被记住,并在稍后从堆栈中弹出时将反转其操作。

答案 2 :(得分:0)

 lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1,
                                int position, long arg3) {
            Intent intent1 = new Intent(getActivity(), EditThought.class);
            getActivity().startActivity(intent1);
        }
    });

这些代码行将正常工作,所以使用它

答案 3 :(得分:0)

您收到错误的原因:

  

当您想要从中返回片段(Discover_Fragment)时   Activity EditThought,您使用了以下内容:

                FragmentManager fragmentManager = getSupportFragmentManager();
                Discover_Fragment fragmentS1 = new Discover_Fragment();
                fragmentManager.beginTransaction()
                        .replace(R.id.containerView, fragmentS1)
                        .commit();
     

在这里,在您的代码上方,查看R.id.containerView,其中   当前活动 活动

现在,让我们来看看解决方案:

  

正如 Alex Chengalan 所说,你必须致电onBackPressed()   方法而不是上面的代码。你去吧!

希望有所帮助!