2012-03-20 70 views
0

我想實現ViewPager在一個活動中合併兩個視圖,當我試圖訪問在充氣視圖中使用findViewById的項目時,我面臨的是NullPointerException,我的自定義頁面適配器是下面,ViewPager訪問虛擬物品

public class CustomPagerAdapter extends PagerAdapter { 

    @Override 
    public int getCount() { 

    return 2; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 

    return view == ((View) object); 
    } 

    @Override 
    public void destroyItem(View view, int value, Object object) { 

    ((ViewPager) view).removeView((View) object); 
    } 

    @Override 
    public Parcelable saveState() { 

    return null; 
    } 

    @Override 
    public Object instantiateItem(View collection, int position) { 

    LayoutInflater layoutInflater = (LayoutInflater) collection.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    int resultId = 0;   
    switch (position) { 

     case 1: 
      resultId = R.layout.layout2; 
      break; 

     case 0: 
     default: 
      resultId = R.layout.layout1; 
      break; 
    } 
    View view = layoutInflater.inflate(resultId, null); 
    ((ViewPager) collection).addView(view, 0); 

    return view; 
    } 

}

而我的活動有:在我試圖訪問按鈕,這是內部佈局1會拋出空值。

public class PageSwiperActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.viewpagerlayout); 

     Button myButton=(Button) findViewById(R.id.myButton); 
    } 
} 

我viewpagerlayout.xml只包含,

<android.support.v4.view.ViewPager 
    android:id="@+id/viewPagerLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

和我layout1.xml包含一個按鈕。給我一些指導。

謝謝。

回答

3

您是否將PageAdapter設置爲ViewPager? 如果不設置它,然後刪除符合按鈕,該代碼添加到您的活動:

final ViewPager viewPager = (ViewPager) findViewById(R.id.viewPagerLayout); 
viewPager.setAdapter(new CustomPagerAdapter()); 

Button myButton = (Button) findViewById(R.id.myButton); 

相反,你可以打電話findViewById進入這個方法您的按鈕您的適配器:

@Override 
public Object instantiateItem(View collection, int position) { 
    ... // your previous code 
    final Button myButton = (Button) findViewById(R.id.myButton); 

    return view; 
} 

當您有充氣佈局,其中包含此按鈕。

1

setContentView(R.layout.viewpagerlayout);

後您使用

Button myButton=(Button) findViewById(R.id.myButton);直接。

但實際上viewpagerlayout沒有任何ID爲的視圖myButton

因此,你正在得到NULL指針異常。在使用findViewById之前,您必須將視圖添加到ViewPager佈局。

在您發佈在此的代碼中,似乎是您正在添加,但您必須在setContentView之後使用它。

+0

我想我在CustomPagerAdapter中添加視圖,我如何在添加視圖後初始化按鈕? – Vignesh 2012-03-20 08:55:22