首页 > 解决方案 > 如何基于时间多次显示textView

问题描述

我想在 10 秒内显示一个 TextView,然后让它每 5 分钟消失一次,但我做不到,我已经阅读了这个Android CountDownTimer - 添加时间导致多个计时器运行,以及许多其他计时器,但仍然做不到,这是我尝试过的

private void placeFingerPrint() {

    authViewModel.getSession().compose(bindToLifecycle()).subscribe(session -> {
        this.session = session;
        TextView textView = view.findViewById(R.id.player_finger_print);
        MediaItem mediaItem = getPlayingMediaItem();

        new CountDownTimer(20000, 10000) {
            @Override
            public void onTick(long millisUntilFinished) {
                if (fingerprint.getChannel() != null && fingerprint.getChannel().contains(mediaItem.getExternalId())) {
                    textView.setVisibility(View.VISIBLE);
                    textView.setText(session.getHouseHoldId());
                } else {
                    textView.setVisibility(View.GONE);
                }
            }

            @Override
            public void onFinish() {
                textView.setVisibility(View.GONE);
                start();
            }
        }.start();

    });

标签: javaandroidandroid-studio

解决方案


我们可以在 android 中使用 Thread 来实现这一点。如果您有明确的结束时间,通常使用 CountDownTimer。

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

public class ThreadSample extends AppCompatActivity {

    Handler uiHandler = new Handler();
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_thread_sample);
        textView = findViewById(R.id.textView);
        NameCounter runnable = new NameCounter();
        new Thread(runnable).start();
    }

    class NameCounter implements Runnable {
        int count = 0;
        boolean show = true;
        @Override
        public void run() {
            while (true) { // add your customized condition here to exit from the loop.
                uiHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        if (show)
                            textView.setVisibility(View.VISIBLE);
                        else
                            textView.setVisibility(View.GONE);
                    }
                });
                try {
                    if (show) {
                        Thread.sleep(10000);
                        show = false;
                    } else {
                        Thread.sleep(5000);
                        show = true;
                    }
                } catch (Exception e) {
                    Log.e("ERROR", e.getMessage());
                }
            }
        }
    }
}

推荐阅读