ActionBar选项卡 - 用详细信息片段替换列表片段

时间:2012-08-02 16:51:53

标签: android android-fragments android-actionbar actionbarsherlock

我正在努力合并标签式ActionBar 片段

我正在使用 ActionBarSherlock 来显示三个独立的标签页,而我的问题只与第一个标签页有关。它应该在列表和详细视图的组合中显示项目(称为“优惠券”)。其他两个选项卡显示不同的内容,但在此处不起作用。

我正在做的是以下内容:

  • 主要活动为三个标签创建三个片段
  • 标签A(列表片段)填充并呈现其列表
  • 对于列表中的点击,我在主要活动中写了一个回调函数,它接收被点击的项目的id并将列表片段与选项卡上的详细信息片段交换(至少应该这样做)
  • 在该回调中,我创建了待显示的详细信息片段,并尝试用它替换列表片段。

不幸的是我没有超越:

  

java.lang.IllegalArgumentException:找不到id 0x7f040027的视图   片段CouponDetailFragment {44f4e310#1 id = 0x7f040027}

我在问题的最后附上了相关的片段。任何帮助都非常感谢。

以下是相关摘录:

public class MyCouponActivity extends SherlockFragmentActivity implements CouponListFragment.Callbacks

列表片段:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:name="foo.bar.CouponListFragment"
    android:id="@+id/coupon_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

片段交换的交易:

@Override
public void onItemSelected(final String id) {
    final Bundle arguments = new Bundle();
    arguments.putString(CouponDetailFragment.ARG_ITEM_ID, id);
    final CouponDetailFragment fragment = new CouponDetailFragment();
    fragment.setArguments(arguments);
    getSupportFragmentManager().beginTransaction().replace(R.id.coupon_list, fragment).commit();
}

1 个答案:

答案 0 :(得分:3)

如果您在XML中定义一个片段,它是固定的,您不能用FragmentTransaction中的另一个片段替换它。

您最好的选择是用某种<fragment />替换ViewGroup。不要忘记,你必须使用FragmentTransaction在你的Activity的onCreate(..)中添加CouponListFragment。