Как реализовать условие при изменении вида с помощью ViewPager

В моей программе я использую Fragments with ViewPagerгде каждый Fragment содержит 3 checkboxes, и я хочу put a condition если пользователь не checked любой из checkbox не переключайтесь на other fragment когда swipe,

Я знаю, что может быть conditionно я не знаю where to put?

это condition будут work для меня, но where to use не знаю

if(!cb1.isChecked() && !cb2.isChecked() && !cb3.isChecked())
            {
                Toast.makeText(getActivity(), "Choose any one !", Toast.LENGTH_SHORT).show();
                return view;
            }

MainActivity.java:-

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the view from activity_main.xml
        setContentView(R.layout.activity_main);

        // Locate the viewpager in activity_main.xml
        ViewPager viewPager = (ViewPager) findViewById(R.id.pager);

        // Set the ViewPagerAdapter into ViewPager
        viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));

    }

}

ViewPagerAdapter.java:-

public class ViewPagerAdapter extends FragmentPagerAdapter {

    final int PAGE_COUNT = 2;
    // Tab Titles
    private String tabtitles[] = new String[] { 
            "Fragment 1",
            "Fragment 2"
            };

    Context context;

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

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

    @Override
    public Fragment getItem(int position) {
        switch (position) {

            // Open FragmentTab1.java
        case 0:
            FragmentTab1 fragmenttab1 = new FragmentTab1();
            return fragmenttab1;

            // Open FragmentTab2.java
        case 1:
            FragmentTab2 fragmenttab2 = new FragmentTab2();
            return fragmenttab2;

        }
        return null;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabtitles[position];
    }
}

FragmentTab1.java:-

public class FragmentTab1 extends Fragment {

    View view;
    CheckBox cb1, cb2, cb3;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Get the view from fragmenttab1.xml
        view = inflater.inflate(R.layout.fragmenttab1, container, false);

        cb1 = (CheckBox) view.findViewById(R.id.cb1);
        cb2 = (CheckBox) view.findViewById(R.id.cb2);
        cb3 = (CheckBox) view.findViewById(R.id.cb3);

        // control status of body frame checkboxes
        cb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

           @Override
           public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                if(isChecked){
                    cb2.setChecked(false);
                    cb3.setChecked(false);      
                }
            }
        });

        cb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                if(isChecked){
                    cb1.setChecked(false);
                    cb3.setChecked(false);
                }
            }
        });

        cb3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                if(isChecked){
                    cb1.setChecked(false);
                    cb2.setChecked(false);
                }
            }
        });         

    /** 
    **  if(!cb1.isChecked() && !cb2.isChecked() && !cb3.isChecked())
        {
            Toast.makeText(getActivity(), "Choose any one !", Toast.LENGTH_SHORT).show();
            return view;
        }
    ***/    

        return view;
    }

}

1 ответ

Лучшая идея - отключить просмотр пальцем, а затем снова разрешить его, поэтому создайте пользовательский и используйте метод setPagingEnabled(boolean enabled)

public class CustomViewPager extends ViewPager {

private boolean enabled;

public CustomViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.enabled = true;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (this.enabled) {
        return super.onTouchEvent(event);
    }

    return false;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    if (this.enabled) {
        return super.onInterceptTouchEvent(event);
    }

    return false;
}

public void setPagingEnabled(boolean enabled) {
    this.enabled = enabled;
} }

и в вашем xml вам нужно:

<mypackage.CustomViewPager 
android:id="@+id/myViewPager" 
android:layout_height="match_parent" 
android:layout_width="match_parent" />

Ссылка: (я верю в авторское право:-))

Как отключить пейджинг, проводя пальцем в ViewPager, но все же иметь возможность программно проводить?

Другие вопросы по тегам