将片段添加到主要活动

Ath*_*eld 1 android android-fragments

我正在关注Android Udacity课程并且已经过时了,所以我尝试通过手动向主要活动添加片段来更新自己.这个代码构建正常,但在应用程序启动时崩溃,在Android监视器中给我一个veeery长错误.

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

LOG

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.mysunshine-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.updateTintFilter(android.graphics.PorterDuffColorFilter,android.content.res.ColorStateList,android.graphics.PorterDuff $ Mode)会有错误的OVE rridden android.graphics.drawable.Drawable中的package-private方法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.mysunshine E/FragmentManager:找不到用于片段PHFragment的id 0x7f0b0054(com.example.athomield.mysunshine:id/container)的视图{ccbb2d0#0 id = 0x7f0b0054} 06-23 11:23:06.772 3095-3095/com.example.athomield.mysunshine E/FragmentManager:活动状态:06-23 11:23:06.773 3095-3095/com.example.athomield.mysunshine E/FragmentManager:Local FragmentActivity b704817 State :06-23 11:23:06.773 3095-3095/com.example.athomield.mysunshine E/FragmentManager:mCreated = falsemResumed = false mStopped = false mReallyStopped = false 06-23 11:23:06.773 3095-3095/com.example .athomield.mysunshine E/FragmentManager:mLoadersStarted = false 06-23 11:23:06.773 3095-3095/com.example.athomield.mysunshine E/FragmentManager:FragmentManager misc state:06-23 11:23:06.773 3095-3095/com.ex ample.athomield.mysunshine E/FragmentManager:mHost = android.support.v4.app.FragmentActivity$HostCallbacks@16b2c9 06-23 11:23:06.773 3095-3095/com.example.athomield.mysunshine E/FragmentManager:mContainer = android .support.v4.app.FragmentActivity $ HostCallbacks @ 16b2c9 06-23 11:23:06.773 3095-3095/com.example.athomield.mysunshine E/FragmentManager:mCurState = 1 mStateSaved = false mDestroyed = false 06-23 11:23 :06.773 3095-3095/com.example.athomield.mysunshine E/FragmentManager:查看层次结构:06-23 11:23:06.773 3095-3095/com.example.athomield.mysunshine E/FragmentManager:com.android.internal.policy .PhoneWindow $ DecorView {4998dce VE .... ... 0,0-0,0} 06-23 11:23:06.773 3095-3095/com.example.athomield.mysunshine E/FragmentManager:android.widget.LinearLayout {9ea54ef VE .... ... 0,0-0,0} 06-23 11:23:06.773 3095-3095/com.example.athomield.mysunshine E/FragmentManager:android.view.ViewStub {e812bfc GE. ...... 0,0-0,0#10203a9 android:id/action_mode_bar_stub} 06-23 11:23:06.773 3095-3095/com.example.athomield.mysunshine E/FragmentManager:android.widget.FrameLayout {94​​eb285 VE .... ... 0,0-0,0} 06-23 11:23:06.773 3095-3095/com.example.athomield.mysunshine E/FragmentManager:android.support.v7.widget.ActionBarOverlayLayout {8c4b8da VE .... ... 0,0-0,0#7f0b0043 app:id/decor_content_parent} 06-23 11:23:06.773 3095-3095/com .example.athomield.mysunshine E/FragmentManager:android.support.v7.widget.ContentFrameLayout {eb1510b VE .... ... 0,0-0,0#1020002 android:id/content} 06-23 11:23 :06.773 3095-3095/com.example.athomield.mysunshine E/FragmentManager:android.widget.RelativeLayout {1b30be8 VE .... ... 0,0-0,0} 06-23 11:23:06.773 3095- 3095/com.example.athomield.mysunshine 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.mysunshine 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.mysunshine 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.mysunshine E/FragmentManager: android.support.v7.widget.Toolbar {da0fe94 VE .... ... 0,0-0,0#7f0b0045 app:id/action_bar} 06-23 11:23:06.773 3095-3095/com.example. athomield.mysunshine E/FragmentManager:android.widget.TextView {595ad3d V.ED .... ... 0,0-0,0} 06-23 11:23:06.773 3095-3095/com.example.athomield. mysunshine E/FragmentManager:android.support.v7.widget.ActionBarContextView {5b18932 GE .... ... 0,0-0,0#7f0b0046 app:id/action_context_bar} 06-23 11:23:06.774 3095-3095 /com.example.athomield.mysunshine D/AndroidRuntime:关闭VM

                                                                            --------- beginning of crash
Run Code Online (Sandbox Code Playgroud)

06-23 11:23:06.774 3095-3095/com.example.athomield.mysunshine E/AndroidRuntime:FATAL EXCEPTION:main进程:com.example.athomield.mysunshine,PID:3095 java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.athomield.mysunshine/com.example.athomield.mysunshine.MainActivity}:java.lang.IllegalArgumentException:找不到片段PHFragment的id 0x7f0b0054(com.example.athomield.mysunshine:id/container)的视图{ ccbb2d0#0 id = 0x7f0b0054}在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)android.app.ActivityThread.-wrap11(ActivityThread.java) )android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344)在android.os.Handler.dispatchMessage(Handler.java:102)在android.os.Looper.loop(Looper.java:148)在android .app.ActivityThread.main(ActivityThread.java:5417)位于com.android.internal.os.ZygoteIn的java.lang.reflect.Method.invoke(Native Method)它是$ MethodAndArgsCaller.run(ZygoteInit.java:726),位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)引起:java.lang.IllegalArgumentException:找不到id 0x7f0b0054的视图(com.example .athomield.mysunshine:id/container)片段PHFragment {ccbb2d0#0 id = 0x7f0b0054}在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:965)android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)在android.app.BackStackRecord.run(BackStackRecord.java:793)的android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)在Android.app的android.app.FragmentController.execPendingActions(FragmentController.java:325). Activity.performStart(Activity.java:6252)位于android.app.A活动中的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379),android.app.A活动. ActivityThread.java)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:134 4)在android.o.Handler.dispatchMessage(Handler.java:102)的android.app.Looper.loop(Looper.java:148)在android.app.ActivityThread.main(ActivityThread.java:5417)的java.来自com.android.internal.os.ZygoteInit.main的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)中的lang.reflect.Method.invoke(Native Method)(ZygoteInit.java:616 ) 

Rit*_*ten 5

在这里你可以这样:

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();
Run Code Online (Sandbox Code Playgroud)