【问题标题】:onClickListener inside of PagerAdapterPagerAdapter 内的 onClickListener
【发布时间】:2013-01-22 16:32:27
【问题描述】:

所以我已经为此苦苦挣扎了一段时间。我是一个相当新的 android 开发者,所以理解一些概念对我来说仍然非常困难。

在我的布局中,我使用 PagerAdapter 在页面之间水平滑动。我想在着陆布局中有一个按钮,单击时可以滚动到相邻的布局。

现在我的问题是,一旦单击该按钮,我就会获得 NPE。所以我看到了问题,但不知道如何编写它以使其真正做到它应该做的事情。

这是我的代码。

public class CustomPageAdapter extends PagerAdapter {

ViewPager mPager;

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.field01;
            break;
        }
        case 1: {
            resId = R.layout.add_site;
            break;
        }
        case 2: {
            resId = R.layout.main;
            break;
        }
    }

    View view = inflater.inflate(resId, null);
    if (position == 1) {
        Button addSiteButton = (Button) view.findViewById(R.id.addSiteButton);
        addSiteButton.setOnClickListener(new OnClickListener() {


            public void onClick(View v) {
             mPager.setCurrentItem(2); //NPE happens here.
            }
        });
    }


    ((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;
}

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

提前致谢!

【问题讨论】:

  • 你应该使用带有 viewpager 的片段,在片段中你可以在你的按钮上定义一个 onClickListener

标签: android android-layout android-viewpager android-button android-pageradapter


【解决方案1】:

发生 NPE 是因为您试图访问 mPager,它只是一个引用,不指向任何东西,由以下行创建:ViewPager mPager;

您需要从 mPager 参考中的布局中检索 viewPager:

ViewPager mPager = (ViewPager) findViewById(R.id.pager);

【讨论】:

  • 你在 onClick 里面添加了那个?
  • 您可以将它添加到您当前已声明 mPager 的位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
相关资源
最近更新 更多