Android studio 如何防止事件侦听器崩溃?

Android studio 如何防止事件侦听器崩溃?,android-studio,android-viewpager,Android Studio,Android Viewpager,当我在文本视图中输入一个数字时,我希望图像按该顺序出现在查看页面中。而且,当我移动页面时,我希望EditText显示页面的位置值。在editText中输入值以访问该页面解决了此问题。但是,如果我稍微触摸页面,就会立即弹出一个错误 当我看到logcat的错误时,它告诉我text,setText(位置+1)和页面设置当前项(索引-1)是错误。我认为,两个事件侦听器之间存在冲突。 我该怎么办 public class SlideshowFragment extends Fragment {

当我在文本视图中输入一个数字时,我希望图像按该顺序出现在
查看页面
中。而且,当我移动页面时,我希望
EditText
显示页面的位置值。在editText中输入值以访问该页面解决了此问题。但是,如果我稍微触摸页面,就会立即弹出一个错误

当我看到
logcat的
错误时,它告诉我
text,setText(位置+1)
页面设置当前项(索引-1)是错误。我认为,两个事件侦听器之间存在冲突。
我该怎么办

public class SlideshowFragment extends Fragment {

    ViewPager pager;
    fragment1 frag1;
    fragment2 frag2;
    ...
    fragment29 frag29;
    fragment30 frag30;
    MyPageAdapter adapter;

    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_slideshow, container, false);

        pager = root.findViewById(R.id.Pager);
        adapter = new MyPageAdapter(getParentFragmentManager());
        final EditText text = root.findViewById(R.id.editTextNumberDecimal);
        pager.setOffscreenPageLimit(30);
        text.setText("1");

        frag1 = new fragment1();
        frag2 = new fragment2();
       ...
        frag30 = new fragment30();

        adapter.addItem(frag1);
        ...
        adapter.addItem(frag30);
        pager.setAdapter(adapter);

        text.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            @Override
            public void afterTextChanged(Editable editable) {
                int index = 1;
                String str = null;
                if(editable != null){
                    str = editable.toString();
                    if(isInteger(str))
                        index = Integer.parseInt(str);
                    if (index <= 30 && index >= 1)
                        pager.setCurrentItem(index-1);
                    else
                        Toast.makeText(getActivity(), "Please enter a digit number between 1~30 ", Toast.LENGTH_SHORT).show();
                }
            }


        });

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

            @Override
            public void onPageSelected(int position) {
                text.setText(position+1);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
        return root;
    }


    private class MyPageAdapter extends FragmentStatePagerAdapter {

        ArrayList<Fragment> images = new ArrayList<Fragment>();

        public MyPageAdapter(@NonNull FragmentManager fm) {
            super(fm);
        }

        public void addItem(Fragment fragment){
            images.add(fragment);
        }

        @NonNull
        @Override
        public Fragment getItem(int position) {
            return images.get(position);
        }


        @Override
        public int getCount() {
            return images.size();
        }

    }

    public static boolean isInteger(String s) {
        try {
            Integer.parseInt(s);
        } catch(NumberFormatException e) {
            return false;
        } catch(NullPointerException e) {
            return false;
        }
        return true;
    }
}
公共类SlideshowFragment扩展了片段{
查看寻呼机;
片段1片段1;
片段2片段2;
...
碎片29碎片29;
碎片30碎片30;
MyPageAdapter适配器;
创建视图时的公共视图(@NonNull LayoutInflater inflater、ViewGroup容器、Bundle savedInstanceState){
视图根=充气机。充气(R.layout.fragment\u幻灯片,容器,假);
pager=root.findviewbyd(R.id.pager);
adapter=新的MyPageAdapter(getParentFragmentManager());
final EditText text=root.findviewbyd(R.id.editTextNumberDecimal);
寻呼机设置偏移量(30);
text.setText(“1”);
fragment1=新的fragment1();
fragm2=新的fragment2();
...
fragment30=新的fragment30();
适配器.附件(frag1);
...
适配器.附件(frag30);
寻呼机设置适配器(适配器);
addTextChangedListener(新的TextWatcher(){
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void PostTextChanged(可编辑){
int指数=1;
字符串str=null;
如果(可编辑!=null){
str=可编辑的.toString();
如果(isInteger(str))
index=Integer.parseInt(str);
如果(索引=1)
pager.setCurrentItem(索引-1);
其他的
Toast.makeText(getActivity(),“请输入1~30之间的数字”,Toast.LENGTH_SHORT).show();
}
}
});
pager.addOnPageChangeListener(新的ViewPager.OnPageChangeListener(){
@凌驾
已滚动页面上的公共无效(int-position、float-positionOffset、int-positionOffsetPixels){
}
@凌驾
已选择页面上的公共无效(内部位置){
text.setText(位置+1);
}
@凌驾
公共无效onPageScrollStateChanged(int状态){
}
});
返回根;
}
私有类MyPageAdapter扩展了FragmentStatePagerAdapter{
ArrayList images=新的ArrayList();
公共MyPageAdapter(@NonNull FragmentManager fm){
超级(fm);
}
公共void附加项(片段){
添加(片段);
}
@非空
@凌驾
公共片段getItem(int位置){
返回图像。获取(位置);
}
@凌驾
public int getCount(){
返回图像。size();
}
}
公共静态布尔isInteger(字符串s){
试一试{
整数.parseInt(s);
}捕获(数字格式){
返回false;
}捕获(NullPointerException e){
返回false;
}
返回true;
}
}

当我将“text.setText(位置+1)”更改为“text.setText(位置+1+”)时。然后它不会关闭,但幻灯片不会翻转。为什么?当我将“text.setText(位置+1)”更改为“text.setText(位置+1+”)时。然后它不会关闭,但幻灯片不会翻转。为什么?