繁体   English   中英

如何从活动开始片段

[英]How to start a fragment from an activity

我正在尝试运行一个类,该类从扩展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 >

如果您的活动扩展了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。

您要替换而不是不加刷新地添加,只需添加即可。 我还简化了您的一个无用变量,只是直接转到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();
    }
});

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

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

如果活动扩展了AppcompatActivity,则应使用getSupportFragmentManager()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM