如何捕获android中可滑动标签的活动部分或标签?

时间:2015-12-27 18:53:12

标签: android android-fragments

我使用可滑动标签作为活动的一部分,共有3个部分。我提供了向右和向左箭头以导航到滑动视图的其他部分。

当我在最左边的部分时,我希望我的左箭头消失,当我在最右边的部分时,我的右箭头消失。

这是我正在尝试的东西,但没有得到理想的结果:

public class MainActivity extends AppCompatActivity {

    private SectionsPagerAdapter mSectionsPagerAdapter;
    static Button rightButton;
    static Button leftButton;

    private ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        rightButton = (Button)findViewById(R.id.buttonRight);
        leftButton = (Button)findViewById(R.id.buttonLeft);


        // Create the adapter that will return a fragment for each of the three
        // primary sections of the activity.
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);
    }

    /**
     * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
     * one of the sections/tabs/pages.
     */
    public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

        @Override
        public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            // Return a PlaceholderFragment (defined as a static inner class below).
            return PlaceholderFragment.newInstance(position + 1);
        }

        @Override
        public int getCount() {
            // Show 3 total pages.
            return 3;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0:
                    return "SECTION 1";
                case 1:
                    return "SECTION 2";
                case 2:
                    return "SECTION 3";
            }
            return null;
        }
    }

    public static class PlaceholderFragment extends Fragment {

        private static final String ARG_SECTION_NUMBER = "section_number";


         // Returns a new instance of this fragment for the given section number.

        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            TextView textView = (TextView) rootView.findViewById(R.id.section_label);
            int sectionNumber = getArguments().getInt(ARG_SECTION_NUMBER);
            String text = instructions(sectionNumber);
            textView.setText(text);
            return rootView;
        }

        private String instructions(int sectionNumber) {
            if (sectionNumber == 1) {
                leftButton.setVisibility(View.INVISIBLE);
                rightButton.setVisibility(View.VISIBLE);
                Log.i("Welcome"," to section 1");
                return "All questions are mandatory. Each question carries 1 mark. There is no negative marking";
            }
            else if(sectionNumber == 2) {
                leftButton.setVisibility(View.VISIBLE);
                rightButton.setVisibility(View.VISIBLE);
                Log.i("Welcome", " to section 2");
                return "Color the bubble besides the option you think is best for the answer.";
            }
            else {
                leftButton.setVisibility(View.VISIBLE);
                rightButton.setVisibility(View.INVISIBLE);
                Log.i("Welcome", " to section 3");
                return "Click on the skip button above to start the test. Timer will start as soon as you'll click that button!";
            }

        }
    }
}

正如您在方法instructions中看到的那样,我尝试使用日志查看发生了什么,但却发现我从未得到过#34;欢迎来到第2部分"甚至在多次滑过标签后也是如此。尽管如此,正确返回与给定部分相关的文本。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

问题是您在getItem中返回了一个新片段

这样做:

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    private final List<Fragment> mFragments = new ArrayList<Fragment>();

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
        mFragments.add(PlaceholderFragment.newInstance(1));
        mFragments.add(PlaceholderFragment.newInstance(2));
        mFragments.add(PlaceholderFragment.newInstance(3));
    }

    @Override
    public Fragment getItem(int position) {
     return mFragments.get(position);
    }
}

同时将按钮更改为fragment_main布局&#34;不是&#34;在activity_main中并像这样使用它。

 public static class PlaceholderFragment extends Fragment {

     private static final String ARG_SECTION_NUMBER = "section_number";
     private  Button rightButton;
     private  Button leftButton;

     // Returns a new instance of this fragment for the given section number.

     public static PlaceholderFragment newInstance(int sectionNumber) {
         PlaceholderFragment fragment = new PlaceholderFragment();
         Bundle args = new Bundle();
         args.putInt(ARG_SECTION_NUMBER, sectionNumber);
         fragment.setArguments(args);
         return fragment;
     }

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        TextView textView = (TextView) rootView.findViewById(R.id.section_label);
        rightButton = (Button)rootView.findViewById(R.id.buttonRight);
        leftButton = (Button)rootView.findViewById(R.id.buttonLeft);
        int sectionNumber = getArguments().getInt(ARG_SECTION_NUMBER);
        String text = instructions(sectionNumber);
        textView.setText(text);
        return rootView;
    }

编辑,如果你想知道你必须实现的cuurent页面。

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        Log.i("Welcome", "page "+ position+1);
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});

同时添加以下行,以便系统只创建一次片段:

mViewPager.setOffscreenPageLimit(3);

您遇到的问题是您现在获得的系统位置不是当前页面。