如果这是一个愚蠢的问题,请道歉。我已经搜索了我的问题的答案,虽然我已经找到了几个提到这个问题,但提出的解决方案都没有解决我的问题。 在我的应用程序中,我从片段调用一个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>
我做错了什么? 提前谢谢。
答案 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()
方法而不是上面的代码。你去吧!
希望有所帮助!