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 就成功锁定了内容视图。
我试图在我的应用程序中实例化一个 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 就成功锁定了内容视图。