为什么viewPager addOnPageChangeListener使用Tab键点击并在滚动页面上中断?

时间:2016-04-07 01:57:08

标签: android android-viewpager

我有四个不同标签的viewPager,我正在使用addOnPageChangeListener来管理页面滚动,以下代码尝试从第一个view获取fragment当点击button片段上的fourth时,当我点击标签时这会正常工作,当我滚动页面时会中断,我无法找到原因,我得到的例外是java.lang.NullPointerException视图error

EditTest
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float 
                         positionOffset, int positionOffsetPixels) {
            if(position == 3){
                EditText title = (EditText) findViewById(R.id.title);
                Log.d("Hello", title.getText().toString());
            }
        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

链接到gif,显示问题here

我试图将此代码移至onPageSelected并且它无效,我也尝试使用以下代码获取fragment view并且没有运气:

public View getFragmentView(int position) {
    String fragmentD = "android:switcher:" + viewPager.getId() + ":" + position;
    android.support.v4.app.Fragment fragment =
             getSupportFragmentManager().findFragmentByTag(fragmentD);
    return fragment.getView();
}

问题为什么这适用于标签点击而不是滚动?

1 个答案:

答案 0 :(得分:0)

您必须在OnCreate中调用它

public class MainActivity extends Activity {
EditText title;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   title = (EditText) findViewById(R.id.title);
}
}

在public void onPageSelected(int position)

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float 
                     positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {

     if(position == 3){
            Log.d("Hello", title.getText().toString());
        }

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});