当前位置: 首页 > 知识库问答 >
问题:

向主活动添加片段

胡翔
2023-03-14

我正在学习Android Udacity课程,它已经过时了,所以我尝试通过手动添加一个片段到主活动中来更新它。这段代码构建得很好,但是当应用程序启动时,在android monitor中出现了一个很长的错误。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if(savedInstanceState == null)
        {
            getFragmentManager().beginTransaction().add(R.id.container,new PHFragment()).commit();
        }
    }
}
public class PHFragment extends Fragment
{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {
        View rootView =  inflater.inflate(R.layout.fragment_main, container, false);
        // Inflate the layout for this fragment
        return rootView;
    }
}

XML fragment_main.xml

    <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.athomield.mysunshine.MainActivity"
    android:touchscreenBlocksFocus="false">

    <ListView
        android:id="@+id/listview_forecast"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>
</FrameLayout>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.athomield.mysunshine.MainActivity"
    android:touchscreenBlocksFocus="false">

</FrameLayout>

list_itemm_forecast.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/list_item_forecast_textview"
    android:gravity="center_vertical"
    >
</TextView>

日志

06-23 11:23:02.878 3095-3095/com.example.athomield。mysunshine W/System:ClassLoader引用了未知路径:/data/app/com.example.athomield。mysunshine-1/lib/x86 06-23 11:23:06.230 3095-3095/com.example.athomield。mysunshine W/System:ClassLoader引用了未知路径:/data/app/com.example.athomield。mysunsine-1/lib/x86 06-23 11:23:06.408 3095-3105/com.example.athomield。mysunshine W/art:暂停所有线程所花费的时间:58.067ms 06-23 11:23:06.417 3095-3105/com.example.athomield。mysunshine I/art:背景粘性并发标记扫描GC释放了13182(1591KB)个AllocSpace对象,9(208KB)个LOS对象,73%空闲,991KB/3MB,暂停64.383ms,总计75.476ms 06-23 11:23:06.509 3095-3095/com.example.athomield。mysunshine W/art:在Android 4.1之前,方法是Android.graphics。PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.UpdatentFilter(android.Graphic.PorterDuff颜色过滤器,android.content.res.ColorStateList,android.Gragics.PorterDuff$模式)会错误地覆盖android.Graphcs.Drwable中的包私有方法。可绘制06-23 11:23:06.685 3095-3101/com.example.athomield。mysunshine W/art:暂停所有线程所花费的时间:29.223ms 06-23 11:23:06.772 3095-3095/com.example.athomield。MySunhine E/FragmentManager:未找到片段PHFragment{ccbb2d0#0 id=0x7f0b0054}06-23 11:23:06.772 3095-3095/com.example.athomield的id 0x7f0b0054(com.execute.athomeld.mysunsine:id/container)的视图。MySunhine E/FragmentManager:活动状态:06-23 11:23:06.773 3095-3095/com.example.athomield。MySunhine E/FragmentManager:Local FragmentActivity b704817状态:06-23 11:23:06.773 3095-3095/com.example.athomield。MySunhine E/FragmentManager:mCreated=false-mresumed=false-mStopped=false-mReallyStopped=false 06-23 11:23:06.773 3095-3095/com.example.athomield。MySunhine E/FragmentManager:mLoadersStarted=false 06-23 11:23:06.773 3095-3095/com.example.athomield。mysunshine E/FragmentManager:FragmentManager杂项状态:06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:mHost=android.support.v4.app.FragmentActivity$HostCallbacks@16b2c906-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:mContainer=android.support.v4.app.FragmentActivity$HostCallbacks@16b2c906-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:mCurState=1 mStateSaved=false mDestroyed=false 06-23 11:23:06.773 3095-3095/com.example.athomield。MySunhine E/FragmentManager:视图层次结构:06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:com.android.internal.policy。电话窗口$DecorView{4998dce V.E.…0,0-0,0}06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:android.widget。线性布局{9ea54ef V.E…..0,0-0,0}06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:android.view。ViewStub{e812bfc G.E…..0,0-0,0#10203a9 android:id/action_mode_bar_stub}06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:android.widget。FrameLayout{94eb285 V.E…..0,0-0,0}06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:android.support.v7.widget。ActionBarOverlayLayout{8c4b8da V.E....…0,0-0,0#7f0b0043应用程序:id/decor_content_parent}06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:android.support.v7.widget。ContentFrameLayout{eb1510b V.E…..0,0-0,0#1020002 android:id/content}06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:android.widget。RelativeLayout{1b30be8 V.E…..0,0-0,0}06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:android.support.v7.widget。AppCompatButton{44cf201 VFED..C..0,0-0,0#7f0b0055 app:id/button}06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:android.support.v7.widget。AppCompatButton{44588a6 VFED..C..0,0-0,0#7f0b0056 app:id/button2}06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:android.support.v7.widget。ActionBarContainer{7a1f2e7 V.ED..0,0-0,0#7f0b0044 app:id/action_bar_container}06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:android.support.v7.widget。工具栏{da0fe94 V.E…..0,0-0,0#7f0b0045 app:id/action_bar}06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:android.widget。TextView{595ad3d V.ED..0,0-0,0}06-23 11:23:06.773 3095-3095/com.example.athomield。mysunsine E/FragmentManager:android.support.v7.widget。ActionBarContextView{5b18932 G.E…..0,0-0,0#7f0b0046 app:id/action_context_bar}06-23 11:23:06.774 3095-3095/com.example.athomield。mysunshine D/AndroidRuntime:关闭虚拟机

                                                                            --------- beginning of crash

06-23 11:23:06.774 3095-3095/com.example.athomield。mysunsine E/AndroidRuntime:致命异常:主进程:com.example.athomield。mysunshine,PID:3095 java.lang.RuntimeException:无法启动活动组件信息{com.example.athomield.mysunsine/com.execute.athomeld.mySunsine.MainActivity}:java.lang.IllegalArgumentException:未找到android.app.ActivityThread.PerformLaunActivity上片段PHFragment{ccbb2d0#id=0x7F0054}的id 0x7f0b0054(com.exform.athmield.Mysunsine:id/容器)的视图(ActivityThread.java:2416)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)在android.app.ActivityThread.-wrap11(activity.java)在andro.app.ActivityThread$H.handleMessage(activiityThreads.java:1344)在andronid.os.Handler.dispatchMessage(Handler.java:102)在andros.os.Looper.loop(Looper.java:148)在andrior.app.Activethread.main(activatyThread:5417)在andRoopjava.lang.reflect.Method。在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)在com.android.internals.os.ZygoteInit.main(ZygoteInit.java:616)调用(本机方法),原因是:java.lang.IllegalArgumentException:未找到android.app.FragmentManagerImpl.MoveManager上片段PHFragment的id 0x7f0b0054(com.example.athomield.mySunsine:id/container)的视图。泰特(FragmentManager.java:965)在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)在android.app.BackStackRecord.run(BackStackRecord.java:793)在android.app.FragmentManagerImpl.ExependingActions(fragmentingManager.java:1535)在Android.app.FragmentController.ExecutPendingActions(fragment Controller.java:325)在Android尔.app.Activity.performStart(Activity.java:6252)在android.app.ActivityThread.performLaunchActivity(ActivityThead.java:2379)位于android.app.ActivityThread.HandleLaunchActivitity(Activitythead.java:2476)

共有3个答案

方航
2023-03-14

确保导入support.v4.app.fragment而不是android.fragment,然后调用getSupportFragmentManager或在构建gradle文件中升级您的min SDK,如果您想使用第二个选项。

戚衡
2023-03-14

您应该改为使用getSupportFragmentManager。这应该能解决你的问题。

更新:看了你的坠机报告后,这是更明显的。您的问题与< code > supportFragementManager 无关。你的问题是膨胀你的碎片的id。添加片段时,使用< code > r . id . fragment _ container 。当您想要动态添加片段时,需要添加< code>viewgroup而不是布局文件名。< code > r . id . fragment _ container view group必须出现在主活动的布局中。例如,它可以是活动框架布局中的另一个框架布局。因此,在加载片段时,您的代码应该是:

getFragmentManager().beginTransaction().add(R.id.fragment_containe,new PHFragment()).commit();

来源 :Android开发者片段链接

况谦
2023-03-14

你可以这样走:

import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
.....
  private FragmentTransaction mFragmentTransaction;
  private FragmentManager mFragmentManager;
.....

  mFragmentManager = getSupportFragmentManager();
    mFragmentTransaction = mFragmentManager.beginTransaction();
    mFragmentTransaction.replace(R.id.content_frame, new PhfFragment());
    mFragmentTransaction.commit();
 类似资料:
  • 问题内容: 我有五个按钮,是动态创建的。我的目标是:单击任何按钮以向其中添加活动类,当然还有其他任何人可以通过该活动类将其删除。我该如何实现? 问题答案: 您需要将状态引入组件并在事件处理程序中进行设置。例如render方法的输出: 事件处理程序(元素方法):

  • 我想从片段到活动使用返回按钮使用工具栏返回图标。 碎片是我的抽屉菜单项 我该怎么做?

  • 我想在Android的一个活动中添加两个片段。但在加法时,它给出了错误; activity_main.xml 片段的布局1 片段2的布局

  • fragment类主活动/主活动如何限制我的主活动在从片段的最后一页返回到主活动时不返回到片段的最后一页,就像我有一个主活动,单击按钮该主活动会导致另外3个活动,其中一个活动有片段。片段的最后一页指向home activity,但当我在home activity上后退时,它再次将我引导到片段的最后一页,然后我再次按下back按钮,然后我的应用程序关闭

  • 我需要从 MainActivity 向 Android Google 地图(片段)添加标记 这是我的代码; 我想在这里添加一个标记: 所有这些都是因为我想从我的主要活动中与我的地图进行交互,其中我有一些按钮和编辑文本 主要活动 这是它的样子,已经有了一个标记,但是我需要在MainActivity中设置它,而不是从map activity中调用它

  • 如何限制我的主要活动不返回片段的最后一页,一旦从片段的最后一页返回到主要活动,就像我有一个主活动一样,单击按钮,该主活动会导致另外3个活动,其中一个活动有片段。片段的最后一页指向home activity,但当我在home activity上后退时,它再次将我引导到片段的最后一页,然后我再次按下back按钮,然后我的应用程序关闭 我的主要活动课 公共类主页扩展应用程序活动{ } 我零星的寻呼机 公