Android之欢迎页和SharedPreferences存储

本文详细介绍了一种简易的Android引导页设计方法,包括布局文件、Java代码实现及SharedPreferences存储技术,确保用户在首次启动应用时体验到友好的引导流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关文章
简易Android 引导页

在我们的生活中,经常需要使用APP,有很多APP在第一次运行的时候会出现欢迎页或者引导页。

实验要求:
1.显示几秒之后自动跳转到app的主activity。
2.如用户点击“我知道了”按钮,下次启动不再显示欢迎页,否则,仍要仍执行“要求1”。
在这里插入图片描述
实现步骤:

1、首先是欢迎页布局文件

activity_welcome_gudie.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_welcome_gudie"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/guide1"
    tools:context="com.example.smarttraffic.WelcomeGudie">

    <Button
        android:layout_width="170dp"
        android:layout_height="wrap_content"
        android:text="我知道了!"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="84dp"
        android:id="@+id/button"
        android:textSize="30sp"
        android:background="@drawable/button_bg_style"
        android:textColor="#ffffff"/>
</RelativeLayout>

布局很简单,只是设置了RelativeLayout的背景图片,然后加了个按钮(可能有人会问我,为什么我的Button更好看一点,点这里看我的另一篇文档,上面有详细说明

2.接下来是欢迎页java代码

WelcomeGudie.java

package com.example.smarttraffic;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class WelcomeGudie extends AppCompatActivity{

    private Button but;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome_gudie);
        but = (Button)findViewById(R.id.button);
        //“我知道了”按钮点击事件
        but.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent intent1=new Intent();
                intent1.putExtra("isClick",true);
                setResult(RESULT_OK,intent1);
                finish();
            }
        });

        //延时3秒后跳转到MainActivity
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent();
                intent.setClass(WelcomeGudie.this, MainActivity.class);
                startActivity(intent);
                finish();
           }
        }, 3000);//3秒后执行Runnable中的run方法
    }

}

我们先说要求一:“显示几秒之后自动跳转到app的主activity”的实现代码
1,首先创建一个Handler对象
Handler handler = new Handler();
2,然后创建一个Runnable对象,使用PostDelayed方法,三秒后调用此Runnable对象执行run()方法中的代码,将界面跳转到MainActivity中。

然后要求二:“如用户点击“我知道了”按钮,下次启动不再显示欢迎页,否则,仍要仍执行“要求1。”
首先说onClick()中的代码,这里我们主要工作是利用Intent 返回数据给MainActivity
1.首先创建一个Intent对象
Intent intent1=new Intent();
2.然后调用putExtra()方法,putExtra()方法接收两个参数,第一个参数是键,在后面可以从Intent 中通过键来取值,第二个参数是你要传递的数据。
intent1.putExtra(“isClick”,true);
第一个参数isClick,使我们的键,第二个参数传递一个布尔型数据true
3.调用setResult()方法,setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果,这里使用RESULT_OK,第二个参数是需要传递数据的Intent ,然后我们填intent1,然后调用finish()方法销毁当前活动。

欢迎页的代码搞定了,然后是主界面的代码

主界面的界面用的是项目自动生成的“Hello World”布局,这就不贴出来了。
下面是MainActivity.java

package com.example.smarttraffic;

import android.content.ContentValues;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity{
    public SharedPreferences preferences;
    public SharedPreferences.Editor editor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        preferences = getSharedPreferences("data", MODE_PRIVATE);
        editor = preferences.edit();
        Intent intent = new Intent();
        if (preferences.getBoolean("firstClick", true)) {
            intent.setClass(this, WelcomeGudie.class);
            startActivityForResult(intent,1);
        }
        

    }
     @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode){
            case  1:
                if(resultCode == RESULT_OK){
                //接收来自WelcomeGudie的数据,判断用户是否点击“我知道了”按钮
                    if(data.getBooleanExtra("isClick",true)){
                        editor.putBoolean("firstClick", false);
                        editor.apply();
                    }
                }
        }
    }

由于判断用户是否点击了“我知道了”按钮并且需要将此数据存储下来,我们要先简单讲讲SharedPreferences存储的知识。
此程序使用SharedPreferences存储分为几步
1.创建对象
public SharedPreferences preferences;
public SharedPreferences.Editor editor;

2.创建文件,用于数据存放
preferences = getSharedPreferences(“data”, MODE_PRIVATE);
第一个参数data是文件名,名字自己取,第二个参数是指定操作模式,目前只有MODE_PRIVATE可选,表示只有当前应用程序才可以对这个文件进行读写
3.将数据存起来
editor = preferences.edit();
editor.putBoolean(“firstClick”, false);
editor.apply();

存储数据可以用putBoolean()、editor.putString()、editor.putInt()等等,这三种分别可以存储布尔型、字符串、整型数据。第一个参数是键,第二个是你要存储的数据
== 重要的一句 editor.apply(); 该语句作用是将添加的数据提交,完成存储,千万别忘了! ==
4.获取数据
preferences.getBoolean(“firstClick”, true)

知识点说完,现在讲一下程序逻辑
首先看onCreate()里面的那个if,
preferences.getBoolean(“firstClick”, true)的意思是:通过getBoolean()方法查询preferences数据中是否有"firstClick"键,现在程序第一次运行自然要让他进if,所以给ture,然后跳转到欢迎页,startActivityForResult(intent,1);这个方法可以在活动销毁的时候返回一个结果给上一个活动,现在第一次进来这句是没有的,这句是在第二次进来时起作用的,传递一个请求码过去。
然后看看onActivityResult()方法,首先验证刚刚那个请求码,然后验证返回处理结果RESULT_OK,接下来分析由引导页传来的isClick数据,判断“我知道了”按钮是否被点击,若被点击的话,将firstClick设为false,这样就不会进入onCreate()中的if了,然后下次进入软件就不会出现引导页了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值