【问题标题】:Bug: Slider Appearing Every time using viewpager错误:每次使用 viewpager 时都会出现滑块
【发布时间】:2017-06-24 10:59:59
【问题描述】:

我正在制作一个滑块演练,当用户单击应用程序时,它会在应用程序中为第一个项目引入......当用户再次打开它时它就消失了。

像这样:https://www.youtube.com/watch?v=va2IRW_e7_w

问题是我每次打开应用程序时都会一次又一次地恢复它,这是一个小错误,我找不到它。

Main2Activity:

    public class Main2Activity extends AppCompatActivity {

        Button next, skip;
        private ViewPagerAdapter adapter;
        private ViewPager viewPager;
        private SliderWalkthrough sliderWalkthrough;
        private int[] layouts;
        private TextView[] dots;
        private LinearLayout dotsLayout;

ViewPager.OnPageChangeListener listener = new ViewPager.OnPageChangeListener() {

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

        }

        @Override
        public void onPageSelected(int position) {

            addButtonDots(position);
            if (position == layouts.length - 1) {

                next.setText("GET STARTED");
                skip.setVisibility(View.GONE);
            } else {
                next.setText("NEXT");
                skip.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    };

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            sliderWalkthrough = new SliderWalkthrough(this);
            if (!sliderWalkthrough.Check()) {
                sliderWalkthrough.setFirst(false);
                Intent intent = new Intent(Main2Activity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
            if (Build.VERSION.SDK_INT >= 21) {

                getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

            }
            setContentView(R.layout.activity_main2);

            viewPager = (ViewPager) findViewById(R.id.id_WalkThroughViewPager);
            dotsLayout = (LinearLayout) findViewById(R.id.layout_dots);

            layouts = new int[]{R.layout.slider_walkthrough_screen1, R.layout.slider_walkthrough_screen2, R.layout.slider_walkthrough_screen3};
            addButtonDots(0);

            adapter = new ViewPagerAdapter();
            viewPager.setAdapter(adapter);
            viewPager.addOnPageChangeListener(listener);

        }

        private void addButtonDots(int position) {

            dots = new TextView[layouts.length];
            int[] colorActive = getResources().getIntArray(R.array.active_dot);
            int[] colorInactive = getResources().getIntArray(R.array.inactive_dot);
            dotsLayout.removeAllViews();
            for (int i = 0; i < dots.length; i++) {
                dots[i] = new TextView(this);
                dots[i].setTextSize(30);
                dots[i].setTextColor(colorInactive[position]);
                dotsLayout.addView(dots[i]);

            }
            if (dots.length > 0) {
                dots[position].setTextColor(colorActive[position]);
            }

        }
    }

滑块演练:

public class SliderWalkthrough {

    SharedPreferences sharedPreferences;
    SharedPreferences.Editor editor;
    Context context;

    public SliderWalkthrough(Context context) {
        this.context = context;
        sharedPreferences=context.getSharedPreferences("first",0);
        editor=sharedPreferences.edit();
     }

    public void setFirst(Boolean firstTime){
        editor.putBoolean("check",firstTime);
        editor.commit();
    }

    public boolean Check()
    {
        return sharedPreferences.getBoolean("check",true);
    }
}

【问题讨论】:

  • 你的listener的代码viewPager.addOnPageChangeListener(listener);在哪里?
  • @Pavneet_Singh 我没有粘贴它,因为我的问题处理它没有用
  • 我问过你,因为它是相关的,简而言之,当您完成不在 if (!sliderWalkthrough.Check()) { 内的视图寻呼机幻灯片时,您需要致电 setFirst(false)
  • @Pavneet_Singh 我已经粘贴了代码帮助我,但我仍然没有得到它

标签: android android-viewpager slider


【解决方案1】:

您需要在演练完成后将preference 的值更改为false,否则if (!sliderWalkthrough.Check()) { 将永远不会执行,并且每次都会显示演练

    @Override
    public void onPageSelected(int position) {

        addButtonDots(position);
        if (position == layouts.length - 1) {
            next.setText("GET STARTED");
            skip.setVisibility(View.GONE);
            sliderWalkthrough.setFirst(false);
            //^^^^^^ add this case
        } 
         else {
            next.setText("NEXT");
            skip.setVisibility(View.VISIBLE);
        }
    }

注意:删除 sliderWalkthrough.setFirst(false); ,不再需要

        if (!sliderWalkthrough.Check()) {
            Intent intent = new Intent(Main2Activity.this, MainActivity.class);
            startActivity(intent);
            finish();
        }

【讨论】:

  • 我明白了一点,只是有点逻辑,试试更新的代码,肯定能工作
  • 对问题的解释是一样的,layouts.length - 1 的意思是2 在您到达遍历的最后一页后更改首选项状态。我很高兴能帮上忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 2019-11-24
相关资源
最近更新 更多