如何首次打开视图寻呼机而不是第二次使用共享偏好?

时间:2018-06-19 10:30:16

标签: android

我创建了两个活动。第一个是Tour.java,第二个是Home.java。浏览活动是针对View寻呼机,我为我的Android应用程序创建了一个视图寻呼机。我使用共享偏好。但是如果我打开应用程序,则无法查看视图寻呼机,直接进入主页。我给视图寻呼机的条件是,如果用户第一次打开应用程序,应该向用户显示视图寻呼机,而第二次不应该向用户显示。但我面临的问题是我无法第一次看到寻呼机本身。 的 Tour.java

public class Tour extends AppCompatActivity implements View.OnClickListener {

    private ViewPager mpager;
    private int[] layouts = {R.layout.firstslide,R.layout.secondslide,R.layout.thirdslide,R.layout.fourthslide};
    private MpagerAdapter mpagerAdapter;
    private LinearLayout Dots_Layout;
    private ImageView[] dots;
    private Button bnnext,bnskip;



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


        if (new PreferenceManager(this).checkPreference())
        {
            login();
        }

        if (Build.VERSION.SDK_INT >= 19)
        {
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }
        else
        {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }


        setContentView(R.layout.tour);

        mpager = (ViewPager)findViewById(R.id.viewpager);
        mpagerAdapter = new MpagerAdapter(layouts,this);
        mpager.setAdapter(mpagerAdapter);

        Dots_Layout = (LinearLayout)findViewById(R.id.dotslayout);

        bnnext = (Button)findViewById(R.id.bnnext);
        bnskip = (Button)findViewById(R.id.bnskip);
        bnnext.setOnClickListener(this);
        bnskip.setOnClickListener(this);

        createDots(0);

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

            }

            @Override
            public void onPageSelected(int position) {

                createDots(position);

                if (position == layouts.length-1)
                {
                    bnnext.setText("Start");
                    bnskip.setVisibility(View.INVISIBLE);
                }
                else
                {
                    bnnext.setText("Next");
                    bnskip.setVisibility(View.VISIBLE);
                } 
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

    }

    private void createDots(int current_position)
    {
        if (Dots_Layout != null)
        {
             Dots_Layout.removeAllViews();
             dots = new ImageView[layouts.length];


             for(int i = 0; i<layouts.length; i++)
             {
                dots[i] = new ImageView(this);
                if (i==current_position)
                {
                    dots[i].setImageDrawable(ContextCompat.getDrawable(this,R.drawable.active_dots));
                }
                else
                {
                    dots[i].setImageDrawable(ContextCompat.getDrawable(this,R.drawable.default_dots));
                }

                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                params.setMargins(4,0,4,0);

                Dots_Layout.addView(dots[i],params);
             }
        }
    }

    @Override
    public void onClick(View view) {

        switch (view.getId())
        {
            case R.id.bnnext:
                loadNextSlide();
                break;
            case R.id.bnskip:
                login();
                new PreferenceManager(this).writePreference();
                break;
        }

    }

    private void login()
    {
        startActivity(new Intent(getApplicationContext(),GridHome.class));
        finish();
    }


    private void loadNextSlide()
    {
        int next_slide = mpager.getCurrentItem()+1;

        if (next_slide<layouts.length)
        {
            mpager.setCurrentItem(next_slide);
        }
        else
        {
            login();
            new PreferenceManager(this).writePreference();
        }

    }


}

PreferenceManager.java

public class PreferenceManager {

private Context context;
private SharedPreferences sharedPreferences;

public PreferenceManager(Context context)
{
    this.context = context;
    getSharedPreference();
}

private void getSharedPreference()
{
    sharedPreferences = context.getSharedPreferences(context.getString(R.string.my_preference),Context.MODE_PRIVATE);
}

public void writePreference()
{
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(context.getString(R.string.my_preference_key),"INIT_OK");
    editor.commit();
}

public boolean checkPreference()
{
    boolean status = false;
    if (sharedPreferences.getString(context.getString(R.string.my_preference_key),"null").equals("null "))
    {
        status = false;
    }
     else
    {
        status = true;
    }
    return status;
}

2 个答案:

答案 0 :(得分:0)

您必须保存布尔值而不是字符串。

public void setIntroShown(boolean flag) {
        SharedPreferences.Editor editor = getEditor();
        editor.putBoolean("intro", flag);
        editor.commit();
    }   

 public boolean checkPreference() {
            initializeSharedPreference();
            return sharedpreferences.getBoolean("intro", false);
        }




private SharedPreferences.Editor getEditor() {
        initializeSharedPreference();
        return sharedpreferences.edit();
    }

     private void initializeSharedPreference() {
            if (sharedpreferences == null) {
                sharedpreferences = context.getSharedPreferences(SharedPrefTags.APP_PREFERENCE, Context.MODE_PRIVATE);
            }
        }

答案 1 :(得分:0)

好,

- 首先检查你的启动器活动是哪个是home.java是你的启动器活动然后你必须从清单文件中删除它。

- 在tour.java活动执行之前检查首选项。如果首选项为false,则重定向到tour.java活动,否则启动主页活动。

是否存在混淆然后让我知道。

感谢。

我不知道如何在tour.java执行之前检查首选项?

-simple,您可以在检查首选项后在启动屏幕上检查它,然后重定向到tour.java或home.java。清楚了吗?