2012-02-20 82 views
0

我實現使用一些水平輕掃分頁的應用程序(向左或向右 - 水平視圖分頁)。我下載了「android.support.v4.view.ViewPager」,發現實行刷卡一部分的方式主要是由於本教程在這裏:http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/的Android - PagerAdapter崩潰時我添加ClickListener

我的問題是,查看按鈕和我刷卡的意見設置OnClickListenr。奇怪的是,雖然我可以在我的主要活動範圍內做到這一點,它崩潰,當我試圖從啓動並帶到前面的其他活動做到這一點。

雖然代碼:我的主要活動

public void Settings(){ 
    setContentView(R.layout.settings); 
    SettingsAdapter adapter = new SettingsAdapter(); 
    ViewPager myPager = (ViewPager) findViewById(R.id.settingspager); 
    myPager.setAdapter(adapter); 
    myPager.setCurrentItem(0);  
    View BackButton = findViewById(R.id.back); 
    BackButton.setOnClickListener(this); 
} 

工作正常,在其他活動中使用時,在「BackButton.setOnClickListener」完全相同的線路崩潰。

從日誌中我得到:

02-20 09:59:50.756: E/AndroidRuntime(489): at lil.kayak.tabs.Settings$SettingsAdapter.instantiateItem(Settings.java:88) 
02-20 09:59:50.756: E/AndroidRuntime(489): at android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:110) 
02-20 09:59:50.756: E/AndroidRuntime(489): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:649) 
02-20 09:59:50.756: E/AndroidRuntime(489): at android.support.v4.view.ViewPager.populate(ViewPager.java:783) 
02-20 09:59:50.756: E/AndroidRuntime(489): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1016) 

我的尋呼機適配器是在兩種情況下:

private class SettingsAdapter extends PagerAdapter { 

    public int getCount() { 
     return 2; 
    } 

    public Object instantiateItem(View collection, int position) { 

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

     int resId = 0; 
     switch (position) { 
     case 0: 
      resId = R.layout.settings1; 
      break; 
     case 1: 
      resId = R.layout.settings2; 
      break; 
     } 

     View view = inflater.inflate(resId, null); 

     ((ViewPager) collection).addView(view, 0); 

     return view; 
    } 



    @Override 
    public void destroyItem(View arg0, int arg1, Object arg2) { 
     ((ViewPager) arg0).removeView((View) arg2); 

    } 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
     return arg0 == ((View) arg1); 

    } 

    @Override 
    public Parcelable saveState() { 
     return null; 
    } 

}

的settings.xml是

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
<android.support.v4.view.ViewPager 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/settingspager"/> 
</LinearLayout> 

那麼問題是什麼?我應該怎麼做才能使它工作?先謝謝你!

編輯:我目前圍繞它使用了Android的工作:的onClick = 「功能」 在我的XML,然後

公共無效功能(視圖v){}在我的課

它現在工作,但我不認爲這是最佳的,所以任何建議都歡迎!

回答

1

也許是心不是收集有效的觀點或僅僅是「空」。 最好使用「getApplicationContext()」或實現一個構造函數是 可以從你的應用程序上下文適配器。

而且,爲了確保您所有需要的東西都有效:如果您沒有LayoutInflater對象,則可能會崩潰,請檢查「inflater」對「null」, 。

另一個原因外會是你的代碼從這個Adapater,這一點,我們不能在這裏看到;)

+0

謝謝你的回答!我工作圍繞它使用了android:的onClick =「功能」在我的XML和它的作品。但我會檢查你寫的東西並告知! – george 2012-02-20 13:23:04

+0

嗯,我有一個吹氣對象,我想現在據說這是「返回我們在運行的背景下,對資源的訪問,類加載器,等等。」 inflater.getContext()但它仍然不起作用:( – george 2012-02-23 10:47:06