如何从活动中启动片段

时间:2017-10-19 13:51:15

标签: java android

我正在尝试从扩展AppCompactActivity的类中运行一个扩展片段的类,我已尝试过在Stackover流程中看到的所有内容,但我无法解决问题。 LineDetails正在扩展片段

    Progress1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Fragment fr = new LineDetails();
            android.app.FragmentManager fm = getFragmentManager();
            android.app.FragmentTransaction fragmentTransaction = fm.beginTransaction();
            fragmentTransaction.replace(R.id.fragment_place, fr);
            fragmentTransaction.commit();
        }
    });

XML

<fragment android:name="com.almac.tracker.LineDetails" android:id="@+id/fragment_place" android:layout_width="match_parent" android:layout_height="match_parent" />

活动类XML的一部分

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:overScrollMode="never"
   android:scrollbars="none"
   tools:context=".Dashboard">
   <FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/fragment_place">
  </FrameLayout>
</RelativeLayout >

4 个答案:

答案 0 :(得分:2)

如果您的活动延长AppCompatActivity,则您无法使用getFragmentManager()

事实上,您应该删除android.app包中的类,例如android.app.FragmentManager。您应该使用包android.support.v4.app中的支持类,例如android.support.v4.app.FragmentManager

使用getSupportFragmentManager()代替getFragmentManager()

堆栈跟踪报告您的活动中没有任何ID为R.id.fragment_place的布局。检查活动的xml并更正片段持有者的ID。

答案 1 :(得分:0)

您正在替换而不是在没有刷新的情况下添加,只需添加即可。我还简化了您的一个无用变量,直接转到ft而不是中间fm

Progress1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        Fragment fr = new LineDetails();
        android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.add(R.id.fragment_place, fr);
        ft.commit();
    }
});

答案 2 :(得分:0)

仔细检查您的布局xml,它应该有一个 FrameLayout ,其属性为@+id/fragment_place,可用作 LineDetails 片段的占位符。

如果您已在布局中放置<fragment />,则无需以编程方式替换()。

答案 3 :(得分:0)

如果活动扩展 AppcompatActivity

,则应使用

getSupportFragmentManager()

编辑: 根据错误!活动的布局中没有名为 fragment_place 的视图,@ + id / fragment_place必须存在于activity_main中(如果这是附加到活动的布局)