Android - 添加ClickListener时,PagerAdapter崩溃了

时间:2012-02-20 10:20:49

标签: android android-viewpager clicklistener

我正在实现一个使用水平滑动分页的应用程序(向左或向右 - 水平视图分页)。我下载了“android.support.v4.view.ViewPager”并找到了实现刷卡部分的方法,这主要归功于本教程:http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/

我的问题是在我的滑动视图中查看按钮并设置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>

那么问题是什么?我该怎么办才能让它发挥作用?提前谢谢!

编辑:我目前使用我的xml中的android:onClick =“Function”解决它,然后

public void Function(View v){}

在我班上

它现在有效,但我不认为这是最佳的,所以欢迎任何提案!

1 个答案:

答案 0 :(得分:1)

也许集合不是有效的视图或只是“null”。 最好使用“getApplicationContext()”或者为适配器实现构造函数 可以从您的应用程序中获取上下文。

并且,为了确保所有需要的东西都有效:检查“inflater”与“null”, 如果你没有LayoutInflater对象,事情就会崩溃。

另一个原因是你的代码在这个Adapater之外,我们在这里看不到;)