今天的任务是完成索引卡三:引导页的实现,已完成。
遇到的问题:通常索引页的倒计时可以跳过,当我写了跳转之后,我发现点击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();
}
}
}
}
}
}