viewpager = (ViewPager)findViewById(R.id.pager); returns NULL,如何使用.addNext() 和.showNext()

viewpager = (ViewPager)findViewById(R.id.pager); returns NULL, how to use .addNext() and .showNext()

我试图在我的应用程序中实例化一个 viewpager,但我找不到使 viewpager 对象非空的方法。每次我从主 activity 中的 onCreate() 方法调用 viewpager = (ViewPager)findViewById(R.id.pager); 时,返回的 viewpager 对象为空。这是为什么?

我正在在此之前启动的 AsyncTask 线程中执行一些视图操作,除了加载一些文件外还显示启动画面。在此线程中,我使用 ViewSwitcher 对象和内置方法(如 .addView().
操纵视图 LoadNoteFiles.java

protected void onPreExecute(){
    PlayFrets.viewSwitch = new ViewSwitcher(mContext);
            PlayFrets.viewSwitch.addView(ViewSwitcher.inflate(mContext, R.layout.splash_screen, null));
            instance = (Activity)mContext;  //cast context from main activity into an activity to access setContentView method
            instance.setContentView(PlayFrets.viewSwitch);
        }
...

    @Override
        protected void onPostExecute(Void v){
            PlayFrets.viewSwitch.addView(ViewSwitcher.inflate(mContext, R.layout.activity_play_frets, null));
            PlayFrets.viewSwitch.showNext();
            ((PlayFrets)mContext).configFretboard();
        }

我是否应该尝试使用 .addView() 将每个菜单片段视图添加到 ViewSwitcher 对象?是什么导致我的 viewPager 始终为空?我不太清楚何时以及如何需要使用 ViewSwitcher 对象和方法,如 .addView() 和 .showNext(),所以一些背景解释是 wonderful.Below are my xml文件和一些相关代码来自我的主要 activity.

PlayFrets.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  //sets activity orientation to portrait
        //Build GUI
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);           //Removes action bar from display
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);  //Removes status bar from display


        //Create AsyncTask to load the note files. A splash screen will be displayed while task is executing
        new LoadNoteFiles(this).execute();

        //Set up Menu Swipe Capability
        //implements ViewPager class
        viewpager = (ViewPager)findViewById(R.id.pager); //viewpager null here
        PagerAdapter pageAdapter = new MenuPagerAdapter(getSupportFragmentManager());
        viewpager.setAdapter(pageAdapter);   //causes nullpointer exception here
    }

activity_play_frets.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="horizontal"
    android:baselineAligned="false"
    android:keepScreenOn="true">

    <LinearLayout    
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@drawable/gold_guitarsim_text"
        android:orientation="vertical" 
        android:id="@+id/toolbarGestureOverlay" >
        <android.support.v4.view.ViewPager
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </android.support.v4.view.ViewPager>
    </LinearLayout>  

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical" 
        android:layout_weight="4">  
    <com.example.guitarsim.Multitouch
        android:id="@+id/fretBoard"  
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@drawable/fret_board1" />
    </LinearLayout>    
</LinearLayout> 

示例菜单片段 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">
</LinearLayout>

致电

setContentView(R.layout.activity_play_frets) 

在你的 getWindow() 函数之后

您必须设置xml查看特定Activity:

在您的情况下,您必须 setContentView(Id_Of_Your_Layout) 其中 包含 您的 Viewpager.

解决了我的问题。解决方案是在我的 Asynctask 中将 ((PlayFrets) mContext).configMenu(); 添加到 PostExecute() 的末尾。我还添加了方法

void configMenu(){ //instantiates a viewpager object viewpager = (ViewPager)findViewById(R.id.pager); PagerAdapter pageAdapter = new MenuPagerAdapter(getSupportFragmentManager()); viewpager.setAdapter(pageAdapter); }

到我的主要 activity class。这样 viewpager 就成功锁定了内容视图。