0

In my program i am using Fragments with ViewPager, where each and every Fragment contains 3 checkboxes, and i want to put a condition if user has not checked any of the checkbox don't switch to other fragment when swipe.

I know what could be the condition, but i don't know where to put ?

This condition will work for me, but where to use don't know:

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

}
4

1 回答 1

0

更好的主意是禁用viewpager刷卡然后再次允许它创建自定义一个并使用该方法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 中用手指滑动来禁用分页但仍然能够以编程方式滑动?

于 2014-08-30T05:55:31.523 回答