• 团队冲刺第二天


    今天的任务是完成索引卡三:引导页的实现,已完成。
    遇到的问题:通常索引页的倒计时可以跳过,当我写了跳转之后,我发现点击Textview"点击跳过”时进入读书页面跳转了两次。
    思考过程:我来来回回读我写的代码,感觉SplashActivity也finish了,最后我发现,是当onClick时,倒计时没有终止,也就是说,不仅点击时跳转了一次,倒计时结束了还跳转了一次。
    解决方法:在onClick中加入handler.removeMessages(CODE);就可以啦。

    package com.example.fooks;
    import android.Manifest;
    import android.app.Activity;
    import android.content.pm.PackageManager;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.widget.TextView;

    import androidx.appcompat.app.AppCompatActivity;
    import androidx.core.app.ActivityCompat;
    import androidx.core.content.ContextCompat;

    import java.lang.ref.WeakReference;

    public class SplashActivity extends Activity {

    public static final int CODE = 1001;
    private TextView mtextView;
    @Override
    protected void onPause() {
        overridePendingTransition(0,0);
        super.onPause();
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (ContextCompat.checkSelfPermission(SplashActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(SplashActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE} ,1);
        }
        setContentView(R.layout.activity_splash);
    
        mtextView = (TextView) findViewById(R.id.text_daojishi);
    
        final MyHandler handler = new MyHandler(this);
        Message message = Message.obtain();
        message.what = CODE;
        message.arg1 = 3000;
        handler.sendMessage(message);
    
        mtextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //跳转
                LoginActivity.start(SplashActivity.this);
                SplashActivity.this.finish();
                handler.removeMessages(CODE);
            }
        });
    }
    
    public static class MyHandler extends Handler{
    
        public final WeakReference<SplashActivity> mWeakReference;
        public MyHandler(SplashActivity activity) {
            mWeakReference = new WeakReference<>(activity);
        }
    
        @Override
        public void handleMessage (Message msg) {
            super.handleMessage(msg);
            SplashActivity activity = mWeakReference.get();
            if (msg.what == CODE) {
                if (activity != null){
                    int time = msg.arg1;
                    activity.mtextView.setText(time/1000+"秒,点击跳过");
    
                    Message message = Message.obtain();
                    message.what = CODE;
                    message.arg1 = time - 1000;
    
                    if(time > 0) {
                        sendMessageDelayed(message,1000);
                    } else {
                        //跳转
                        LoginActivity.start(activity);
                        activity.finish();
                    }
                }
            }
        }
    }
    

    }

  • 相关阅读:
    提取 Microsoft.ReportViewer.ProcessingObjectModel.dll Microsoft.ReportViewer.DataVisualization.dll 等dll(转贴)
    Windows API 逐个逐个学(0) MessageBox
    asp程序员使用asp.net中服务器控件的困惑
    SQLServer 存储过程中不拼接SQL字符串实现多条件查询
    工作学习笔记
    c#3.0/3.5 中的一些新特性
    firefox中使用ctrl+0解决了一个调试很长时间的问题
    使用Nunit进行单元测试
    asp.net 用户控件和自定义控件总结
    Visual Studio 2008 无法启动调试.找不到Microsoft Internet Explorer
  • 原文地址:https://www.cnblogs.com/xrj-/p/12722107.html
Copyright © 2020-2023  润新知