2014年9月24日 星期三

[Android] ViewPager 遇到在不同xml , 呼叫非setContentView內的R.id.物件 之解決方式

最近在改良Android的APP,先是view flipper,然後現在進階到view pager。

ViewPager可以作出很棒的特效,問題就是在xml方面,如果你要設定物件的話就必須要先

findViewbyId(),這乍聽之下沒甚麼問題,可是假如不是在main.xml檔(主要的xml)的物件呢?

我們使用findViewById()還是可以找到R.id.物件名稱,但只要你一使用的話就會出現錯誤-

java.lang.IllegalState...... NullPointerException....等等。為什麼會出現這樣的錯誤呢?

答案是因為你呼叫的id不在現在的頁面上(Android抓不到他)因此就出現nullpointerException!

在寫的時候也遇到這樣的問題,因此就上網查查看有沒有人也遇到這樣的問題?

發現這篇: 這裡

大意就是說

1.先宣告一個全域變數: private View currentViewPage

2.在 public class MyViewPagerAdapter extends PagerAdapter {} 裡面加入

  @Override
public void setPrimaryItem(ViewGroup container, int position,
Object object) {
currentViewPage = (View) object;
}

也就是把現在的position的object轉型成view然後放入currentViewPage(第一步驟設定的變數)裡

面。

3.最後   IP_edt = (EditText) currentViewPage.findViewById(R.id.IP_edt01);
      IP_edt.setText("123");

就可以用了喔!(當然IP_edt已經在前面有宣告過了)


希望可以幫助也同樣遇到困難的人!