如何使用自定义动画从另一个片段启动片段(viewpager)的集合

时间:2015-01-23 08:52:34

标签: android android-fragments android-viewpager

我有一个活动和三个片段。第一个片段是一个菜单,当从该菜单中选择一些东西时,另一个片段就会进入。该片段是一个数据列表,用户可以通过简单地点击"添加" ActionBar中的按钮,导航到ViewPager中片段的集合(3-4)。

我想要做的是在启动新片段时添加滑动动画。 实际上我是用setCustomAnimations方法做的,并且它第一次正如我想要的那样工作。它在菜单中滑动,然后是带有列表数据的片段,然后是ViewPager。然而,当我回到菜单并尝试重新做同样的事情时,它并没有像以前一样工作。 ViewPager中的片段根本不会加载。

这是我的BaseMenuActivity

private void openFragment(int pageId) {
    switch (pageId) {
        case PAGE_MENU:
            mFragment = new FragmentMenu();
            currentFragment = 0;
            break;
        case PAGE_MENU_ITEM1:
            mFragment = new FragmentMenuItem1();
            currentFragment = 1;
            break;
        case PAGE_MENU_ITEM2:
            mFragment = new FragmentMenuItem2();
            currentFragment = 2;
            break;
    }

    if (mFragment != null) {
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        if (currentFragment != 0) {
            ft.setCustomAnimations(R.anim.enter_anim, R.anim.exit_anim);
        }
        ft.replace(mainLayout.getId(), mFragment).commit();
    }
}

,这是我的VerticalViewPager片段采取行动的FragmentBaseExecution

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle     savedInstanceState) {
    rootView = inflater.inflate(R.layout.activity_risk_evaluation_form, null);
    activity = (BaseMenuActivity) this.getActivity();


    actionBar = getActivity().getActionBar();
    View actionBarView = actionBar.getCustomView();
    txtPageName = ((TextView) actionBarView.findViewById(R.id.txtPageName_actionBar));
    txtTime = ((TextView) actionBarView.findViewById(R.id.txtTime_actionBar));
    txtPageNumber = ((TextView) actionBarView.findViewById(R.id.txtPageNumber_actionBar));

    fragments = getFragments();

    PagerAdapter pageAdapter = new PagerAdapter(activity.getSupportFragmentManager(), fragments);

    pager = (VerticalViewPager) rootView.findViewById(R.id.ViewPager);
    pager.setAdapter(pageAdapter);

    final View.OnClickListener pageButtonListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            pageIndex = pager.getCurrentItem();

            int id = view.getId();

            if (id == btnNext.getId()) {
                openNextPage();
            } else if (id == btnBack.getId()) {
                openPreviousPage();
            }
        }
    };

    btnNext.setOnClickListener(pageButtonListener);
    btnBack.setOnClickListener(pageButtonListener);

    pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {
            pageIndex = i;
        }

        @Override
        public void onPageSelected(int i) {
            if (i > pageIndex) {
                controlPage();
            } else
                pageChanged();
        }

        @Override
        public void onPageScrollStateChanged(int i) {
        }
    });
    prepareActionBar();
    return rootView;
}

private void openNextPage() {
    controlPage();
}

private void openPreviousPage() {
    pager.setCurrentItem(pageIndex - 1, true);
}

private void controlPage() {
    ((FragmentBaseEvaluation) fragments.get(pageIndex)).checkItems(this);
}

private void pageChanged() {
    pageIndex = pager.getCurrentItem();
    int lastPage = fragments.size() - 1;
    int currentPage = pageIndex + 1;

    txtPageNumber.setText(currentPage + " / " + lastPage);

    if (currentPage == lastPage) {
        btnNext.setText("Finish");
        lastPageHasCome = true;
    } else {
        btnNext.setText("Next");
        lastPageHasCome = false;
    }
}

private List<Fragment> getFragments() {
    List<Fragment> fList = new ArrayList<Fragment>();

    fList.add(new Fragment1());
    fList.add(new Fragment2());
    fList.add(new Fragment3());

    return fList;
}

@Override
public void onInformForItems(Fragment source, boolean isDone) {
    Log.e("Checked", isDone + "");
    if (isDone) {
        //The page is fully filled.
        pager.setCurrentItem(pageIndex + 1, true);

    } else {
        pager.setCurrentItem(pageIndex, true);
    }
    pageChanged();
}

private void prepareActionBar() {
    ActionBar actionBar = nursingExecutionActivity.getActionBar();
    txtPageName = ((TextView) actionBar.getCustomView().findViewById(R.id.txtPageName_actionBar));
    txtTime = ((TextView) actionBar.getCustomView().findViewById(R.id.txtTime_actionBar));
    txtPageNumber = ((TextView) actionBar.getCustomView().findViewById(R.id.txtPageNumber_actionBar));

    txtPageNumber.setVisibility(View.VISIBLE);
    txtTime.setVisibility(View.VISIBLE);
    btnBack.setVisibility(View.VISIBLE);
    btnNext.setVisibility(View.VISIBLE);

    Date date = new Date();
    txtPageNumber.setText(pager.getCurrentItem() + 1 + " / " + (fragments.size() - 1));
    SimpleDateFormat simpleDate = new SimpleDateFormat("HH:mm");
    String mDate = simpleDate.format(date);
    txtTime.setText(getResources().getString(R.string.time) + mDate);
    txtPageName.setText("Page Name");
}

对我来说这是一个非常奇怪的问题。你有什么建议会导致这个问题,或者我是否实施错误。

0 个答案:

没有答案