ViewPager:在滚动之间执行操作

时间:2014-12-24 01:22:41

标签: sqlite android-fragments android-viewpager

目前,有问题的项目是使用ViewPager设置的,该ViewPager有一个能够加载4个不同片段的适配器。最后3个片段依赖于第一个片段给它们一个值(SQL外键来自ViewPager中第一个项目的值)。

我的问题是:如何从第一个Fragment的EditText中检索一个值,执行SQL操作并在用户尝试"轻扫"后传递一个值。到下一个标签?

注意,我试图在滑动时执行此操作,而不是通过按钮。到目前为止,我试图重写OnPageScrolled,它在引用第一个片段时产生了一个空指针。我假设第一个片段在我尝试调用它时已经被破坏了hasPopulatedClassName()函数

参考,违规活动。请注意OnPageScrolled

下的注释
public class ActivityClassEdit extends FragmentActivity implements ViewPager.
        private ClassEditPagerAdapter aPager;

        //Views
            private ViewPager vPager;

        //Boolean telling us if we are good to move on to Criteria, People, or Links
            private boolean mClassInserted;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_class_edit);
            if(getIntent().hasExtra(CM.BKEY_PASSED_SEMESTERKEY)){
                //Set the views
                vPager=(ViewPager) findViewById(R.id.ace_pager);
                //Instantiate the pager and set it

                aPager=new ClassEditPagerAdapter(this, getIntent().getExtras().getLong(CM.BKEY_PASSED_SEMESTERKEY, -1));
                vPager.setAdapter(aPager);
                vPager.setOnPageChangeListener(this);


            } else {
                //TODO handle not having a semester key
            }
        }

    //=============PageScrollListener==============
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            if(!mClassInserted) {
                if (position == 1) {

                    //FragmentClassEdit fCE = (FragmentClassEdit) aPager.getRegisteredFragment(0);
                    FragmentClassEdit fCE = (FragmentClassEdit) aPager.getRegisteredFragment(0);
                    if (fCE.hasPopulatedClassName() == false) {
                        vPager.setCurrentItem(0);
                        Toast.makeText(this, getResources().getString(R.string.toast_typeInClassName), Toast.LENGTH_LONG).show();

                    } else {
                        //Save to shared Preferences, in case we have to delete on user cancellation
                        //null pointer here!!!
                        long mInsertedClassID= Long.getLong(fCE.insertClass());
                        getSharedPreferences(CM.SP, Activity.MODE_PRIVATE).edit().putLong(CM.SP_LASTINSERTEDCLASS, mInsertedClassID).apply();
                        aPager.setClassID(mInsertedClassID);
                        vPager.setCurrentItem(position);
                    }
                }

            } else {
                vPager.setCurrentItem(position);
            }
        }

这是ViewPagerAdapter:

public class ClassEditPagerAdapter extends FragmentStatePagerAdapter{

    private FragmentClassEdit fCE;
    private Fragment fCrit;
    private Fragment fLinks;
    private Fragment fPeople;


    private FragmentManager fragmentManager;
    private String[] sTabText;


    SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();

    private Context ctx;

    private long semID;
    private long cID;


    public ClassEditPagerAdapter(FragmentActivity context, long semesterID){
        super(context.getSupportFragmentManager());
        fragmentManager=context.getSupportFragmentManager();
        ctx= context;
        sTabText = ctx.getResources().getStringArray(R.array.cepa_titles);
        cID=-1;
        semID=semesterID;
    }


    public void setClassID(long classID){
        cID=classID;
    }

    @Override
    public Fragment getItem(int fragID) {
        switch (fragID) {
            //FragClassEdit
            case 0:

                fCE = FragmentClassEdit.newInstance(semID);


                return fCE;

            //FragTypeEdit
            case 1:


                fCrit = FragmentCriteriaEdit.newInstance(cID);
                return fCrit;




            //FragPeople
            case 2:
                fPeople = FragmentPeopleEdit.newInstance(cID);
                return fPeople;

            //FragLinks
            case 3:
                fLinks = FragmentLinkEdit.newInstance(cID);
                return fLinks;

        }
        return null;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position){
        Fragment fragment = (Fragment) super.instantiateItem(container, position);
        registeredFragments.put(position, fragment);
        return fragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        registeredFragments.remove(position);
        super.destroyItem(container, position, object);
    }

    public Fragment getRegisteredFragment(int position) {
        return registeredFragments.get(position);
    }

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

    @Override
    public String getPageTitle(int position){
        return sTabText[position];
    }

}

0 个答案:

没有答案