在片段中使用findViewById时出错

时间:2015-09-08 16:49:58

标签: android android-fragments android-fragmentactivity fragmentmanager

我是一名学习者并坚持到了一步。我试图找到相关的答案,但找不到任何有用的答案。我正在尝试进行一项有FRAME LAYOUT的活动。现在,我首先尝试显示图像2秒,然后它应该消失,并应显示一些视图,如TextView或按钮。如果我不使用findViewById它显示一切正常。但是当我使用findViewById时... app force在显示图像后关闭

MainActivity.java

    package rihan.fragmenttryallviews;

    import android.app.Activity;
    import android.app.FragmentTransaction;
    import android.os.Bundle;
    import android.os.Handler;
    import android.widget.TextView;

    public class MainActivity extends Activity {

        private static final int DELAY = 2000;



        SplashFragment splashfragment = new SplashFragment();
        FragmentTransaction ft;


        Handler hndlr = new Handler();

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

            ft = getFragmentManager().beginTransaction();
            ft.add(R.id.mainframe, splashfragment, "SPLASH_FRAGMENT");
            ft.commit();

            hndlr.postDelayed(new Runnable() {

                private Activity view;

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    FragmentTransaction ft1;
                    ft1 = getFragmentManager().beginTransaction();
                    ft1.remove(splashfragment).commit();

                    AfterSplash aftersplash = new AfterSplash();

                    FragmentTransaction after_splash;
                    after_splash = getFragmentManager().beginTransaction();
                    after_splash.add(R.id.mainframe, aftersplash, "AFTER_SPLASH");
                    after_splash.commit();

                    //TextView text = (TextView) findViewById(R.id.txt1);
                    //text.setText("test");
                }
            }, DELAY);
        }
    }

activity_main.xml中

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/linear1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

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

    </LinearLayout>

SplashFragment.java

    package rihan.fragmenttryallviews;

    import android.app.Fragment;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;

    public class SplashFragment extends Fragment {

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            View splash_view=inflater.inflate(R.layout.fragment_splash, container, false);
            return splash_view;
        }

    }

fragment_splash.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/image_splash"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/ic_launcher" />

    </LinearLayout>

AfterSplash.java

    package rihan.fragmenttryallviews;

    import android.app.Fragment;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;

    public class AfterSplash extends Fragment {

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            View v1=inflater.inflate(R.layout.splash_after, container,false);
            return v1;
        }

    }

splash_after.xml

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

logcat的

09-08 22:42:22.346: D/asset(20377): AssetManager-->addDefaultAssets CIP path not exsit!
09-08 22:42:22.349: D/Proxy(20377): setHttpRequestCheckHandler
09-08 22:42:22.350: D/ActivityThread(20377): BIND_APPLICATION handled : 0 / AppBindData{appInfo=ApplicationInfo{4259ed98 rihan.fragmenttryallviews}}
09-08 22:42:22.537: D/dalvikvm(20377): JIT code cache reset in 0 ms (0 bytes 3/0)
09-08 22:42:22.544: D/dalvikvm(20377): GC_FOR_ALLOC freed 2644K (26005), 18% free 12615K/15312K, paused 47ms, total 47ms
09-08 22:42:22.590: D/ActivityThread(20377): ACT-AM_ON_RESUME_CALLED ActivityRecord{425a0448 token=android.os.BinderProxy@4259fbc8 {rihan.fragmenttryallviews/rihan.fragmenttryallviews.MainActivity}}
09-08 22:42:22.590: V/PhoneWindow(20377): DecorView setVisiblity: visibility = 4 ,Parent =null, this =com.android.internal.policy.impl.PhoneWindow$DecorView{427df1b0 I.ED.... R.....ID 0,0-0,0}
09-08 22:42:22.600: V/PhoneWindow(20377): DecorView setVisiblity: visibility = 0 ,Parent =ViewRoot{426a8378 rihan.fragmenttryallviews/rihan.fragmenttryallviews.MainActivity,ident = 0}, this =com.android.internal.policy.impl.PhoneWindow$DecorView{427df1b0 V.ED.... R.....ID 0,0-0,0}
09-08 22:42:22.601: D/ActivityThread(20377): ACT-LAUNCH_ACTIVITY handled : 0 / ActivityRecord{425a0448 token=android.os.BinderProxy@4259fbc8 {rihan.fragmenttryallviews/rihan.fragmenttryallviews.MainActivity}}
09-08 22:42:22.648: D/GraphicBuffer(20377): create handle(0x605d4a70) (w:480, h:800, f:1)
09-08 22:42:22.649: I/MaliEGL(20377): [Mali]window_type=1, is_framebuffer=0, errnum = 0
09-08 22:42:22.649: I/MaliEGL(20377): [Mali]surface->num_buffers=4, surface->num_frames=3, win_min_undequeued=1
09-08 22:42:22.650: I/MaliEGL(20377): [Mali]max_allowed_dequeued_buffers=3
09-08 22:42:22.651: D/GraphicBuffer(20377): close handle(0x605d4a70) (w:480 h:800 f:1)
09-08 22:42:22.653: D/GraphicBuffer(20377): create handle(0x605d5860) (w:480, h:800, f:1)
09-08 22:42:22.655: D/OpenGLRenderer(20377): Enabling debug mode 0
09-08 22:42:22.656: D/GraphicBuffer(20377): create handle(0x60cb30e0) (w:1408, h:768, f:1)
09-08 22:42:22.663: D/OpenGLRenderer(20377): setViewport 480x800 <0x605d5de8>
09-08 22:42:22.667: V/InputMethodManager(20377): onWindowFocus: null softInputMode=288 first=true flags=#1810100
09-08 22:42:22.667: V/InputMethodManager(20377): START INPUT: com.android.internal.policy.impl.PhoneWindow$DecorView{427df1b0 V.ED.... R.....ID 0,0-480,800} ic=null tba=android.view.inputmethod.EditorInfo@42730308 controlFlags=#104
09-08 22:42:22.789: D/dalvikvm(20377): JIT code cache reset in 0 ms (0 bytes 4/0)
09-08 22:42:22.791: D/dalvikvm(20377): GC_FOR_ALLOC freed 650K (8667), 18% free 12654K/15428K, paused 35ms, total 35ms
09-08 22:42:22.793: I/dalvikvm-heap(20377): Grow heap (frag case) to 13.873MB for 1536016-byte allocation
09-08 22:42:22.826: D/dalvikvm(20377): GC_FOR_ALLOC freed 2K (65), 17% free 14152K/16932K, paused 32ms, total 32ms
09-08 22:42:22.860: D/OpenGLRenderer(20377): prepareDirty (0.00, 0.00, 480.00, 800.00) opaque 1 <0x605d5de8>
09-08 22:42:22.868: D/OpenGLRenderer(20377): finish <0x605d5de8>
09-08 22:42:22.886: D/GraphicBuffer(20377): create handle(0x6127e1b0) (w:480, h:800, f:1)
09-08 22:42:22.903: D/OpenGLRenderer(20377): prepareDirty (0.00, 0.00, 480.00, 800.00) opaque 1 <0x605d5de8>
09-08 22:42:22.904: D/OpenGLRenderer(20377): finish <0x605d5de8>
09-08 22:42:22.911: D/GraphicBuffer(20377): create handle(0x605bb4b8) (w:480, h:800, f:1)
09-08 22:42:22.913: D/OpenGLRenderer(20377): prepareDirty (0.00, 0.00, 480.00, 800.00) opaque 1 <0x605d5de8>
09-08 22:42:22.914: D/OpenGLRenderer(20377): finish <0x605d5de8>
09-08 22:42:23.069: D/GraphicBuffer(20377): create handle(0x6127fcb8) (w:480, h:800, f:1)
09-08 22:42:23.091: D/OpenGLRenderer(20377): prepareDirty (0.00, 0.00, 480.00, 800.00) opaque 1 <0x605d5de8>
09-08 22:42:23.092: D/OpenGLRenderer(20377): finish <0x605d5de8>
09-08 22:42:24.431: D/AndroidRuntime(20377): Shutting down VM
09-08 22:42:24.431: W/dalvikvm(20377): threadid=1: thread exiting with uncaught exception (group=0x419b3c98)
09-08 22:42:24.431: W/dalvikvm(20377): threadid=1: uncaught exception occurred
09-08 22:42:24.432: W/System.err(20377): java.lang.NullPointerException
09-08 22:42:24.436: W/System.err(20377):    at rihan.fragmenttryallviews.MainActivity$1.run(MainActivity.java:49)
09-08 22:42:24.436: W/System.err(20377):    at android.os.Handler.handleCallback(Handler.java:808)
09-08 22:42:24.437: W/System.err(20377):    at android.os.Handler.dispatchMessage(Handler.java:103)
09-08 22:42:24.437: W/System.err(20377):    at android.os.Looper.loop(Looper.java:193)
09-08 22:42:24.437: W/System.err(20377):    at android.app.ActivityThread.main(ActivityThread.java:5292)
09-08 22:42:24.437: W/System.err(20377):    at java.lang.reflect.Method.invokeNative(Native Method)
09-08 22:42:24.438: W/System.err(20377):    at java.lang.reflect.Method.invoke(Method.java:515)
09-08 22:42:24.438: W/System.err(20377):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
09-08 22:42:24.438: W/System.err(20377):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
09-08 22:42:24.438: W/System.err(20377):    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
09-08 22:42:24.438: W/System.err(20377):    at dalvik.system.NativeStart.main(Native Method)
09-08 22:42:24.438: W/dalvikvm(20377): threadid=1: calling UncaughtExceptionHandler
09-08 22:42:24.440: E/AndroidRuntime(20377): FATAL EXCEPTION: main
09-08 22:42:24.440: E/AndroidRuntime(20377): Process: rihan.fragmenttryallviews, PID: 20377
09-08 22:42:24.440: E/AndroidRuntime(20377): java.lang.NullPointerException
09-08 22:42:24.440: E/AndroidRuntime(20377):    at rihan.fragmenttryallviews.MainActivity$1.run(MainActivity.java:49)
09-08 22:42:24.440: E/AndroidRuntime(20377):    at android.os.Handler.handleCallback(Handler.java:808)
09-08 22:42:24.440: E/AndroidRuntime(20377):    at android.os.Handler.dispatchMessage(Handler.java:103)
09-08 22:42:24.440: E/AndroidRuntime(20377):    at android.os.Looper.loop(Looper.java:193)
09-08 22:42:24.440: E/AndroidRuntime(20377):    at android.app.ActivityThread.main(ActivityThread.java:5292)
09-08 22:42:24.440: E/AndroidRuntime(20377):    at java.lang.reflect.Method.invokeNative(Native Method)
09-08 22:42:24.440: E/AndroidRuntime(20377):    at java.lang.reflect.Method.invoke(Method.java:515)
09-08 22:42:24.440: E/AndroidRuntime(20377):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
09-08 22:42:24.440: E/AndroidRuntime(20377):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
09-08 22:42:24.440: E/AndroidRuntime(20377):    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
09-08 22:42:24.440: E/AndroidRuntime(20377):    at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:1)

片段转换不会立即发生,这就是你findViewById失败的原因。如果您想在commit调用后立即强制执行此操作,请执行以下操作:

getFragmentManager().executePendingTransactions();

答案 1 :(得分:0)

试试这可能会有效

 FragSqliteExample fragSqliteExample=new FragSqliteExample();
        FragmentTransaction ft=root.getSupportFragmentManager().beginTransaction();
        ft.addToBackStack(FragSqliteExample.class.getName());
        ft.add(R.id.frgContainer,fragSqliteExample,FragMain.class.getName());
        ft.commit();
相关问题