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+”)时。然后它不会关闭,但幻灯片不会翻转。为什么?