2014-03-02 72 views
0

我正试图把一个简单的视图寻呼机应用程序,我想扩大后。Android ViewPager findViewById(R.id.viewPager)总是返回null

目前当我打电话给ViewPager vPager = (ViewPager) findViewById(R.id.viewPager);时,我的FragmentActivityonCreate方法返回null。

以下是完整的解释:

我的GUI XML是这样的:

\res\layout\view_fragment.xml 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Medium Text" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

</LinearLayout> 

相应片段类看起来是这样的:

public class ViewFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.view_fragment, container, false); 
    } 
} 

,我有一个寻呼机XML像这个:

\res\layout\view_pager.xml 
<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/viewPager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

和我有寻呼机活动,看起来像这样:

public class ScreenPagerActivity extends FragmentActivity { 

    private ViewPager vPager; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_fragment); // The view 

     vPager = (ViewPager) findViewById(R.id.viewPager); 
     ScreenPagerAdapter pagerAdapter = new ScreenPagerAdapter(getSupportFragmentManager()); 
     vPager.setAdapter(pagerAdapter); 
    } 

    @Override 
    public void onBackPressed() { 
     if (vPager.getCurrentItem() == 0) { 
      // If the user is currently looking at the first step, allow the system to handle the 
      // Back button. This calls finish() on this activity and pops the back stack. 
      super.onBackPressed(); 
     } else { 
      // Otherwise, select the previous step. 
     vPager.setCurrentItem(vPager.getCurrentItem() - 1); 
     } 
    } 

    private class ScreenPagerAdapter extends FragmentStatePagerAdapter { 
    public ScreenPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public android.support.v4.app.Fragment getItem(int position) { 
     return new ViewFragment(); 
    } 

    @Override 
    public int getCount() { 
     return 5; 
    } 
    } 
} 

然而,该声明vPager = (ViewPager) findViewById(R.id.viewPager);总是返回null。任何人都可以告诉我哪里出错了。

只是柜面有帮助,我的活动片段清单文件看起来是这样的:

<activity 
    android:name="uk.co.jeeni.android.androidpagerview.ScreenPagerActivity" 
    android:label="@string/app_name" 
    android:parentActivityName="uk.co.jeeni.android.androidpagerview.MainActivity" 
    android:uiOptions="splitActionBarWhenNarrow" > 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value="uk.co.jeeni.android.androidpagerview.MainActivity" /> 
</activity> 

请帮助!

谢谢

回答

5

我想你选错了视图。试试这个:

setContentView(R.layout.view_pager); // The view where your ViewPager is! 

,而不是

setContentView(R.layout.view_fragment); // The view for your Fragment. 

这就是为什么你ViewPager返回null,因为该方法无法找到它已选定的布局。
HTH