Update TextView with each string in String-array every 5 seconds

大兔子大兔子 提交于 2020-01-05 02:30:54

问题


I have a TextView and I would like to update the TextView every 5 second with each string in my String Array.

Here is the code I tried. It always shows only the last String in the String array.

TextView display;
EditText caption;
Thread thread;
String blinks;
String[] wc;
private CountDownTimer timer;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    display = (TextView) findViewById(R.id.display);
    caption = (EditText) findViewById(R.id.caption);

    timer = new CountDownTimer(5000, 20) {

        @Override
        public void onTick(long millisUntilFinished) {

            String[] wc = {"The","Qucik", "Brown","fox","Jumped"};
            for (int j = 0; j < wc.length; j++) {

                blinks = wc[j];
                final String[] titles = {"" + blinks + ""};

                for (int i = 0; i < titles.length; i++) {
                    display.setText(titles[i]);
                }

            }


        }

        @Override
        public void onFinish() {
            try{
                yourMethod();
            }catch(Exception e){

            }
        }
    }.start();
}

回答1:


final String[] wc = {"The", "Qucik", "Brown", "fox", "Jumped"};
        final android.os.Handler handler = new android.os.Handler();
        handler.post(new Runnable() {

            int i = 0;

            @Override
            public void run() {
                display.setText(wc[i]);
                i++;
                if (i == wc.length) {
                    handler.removeCallbacks(this);
                } else {
                    //5 sec
                    handler.postDelayed(this, 1000 * 5);
                }
            }
        });



回答2:


try to play Around with handler in android , i think you are asing something like this :

String[] wc = {"The","Qucik", "Brown","fox","Jumped"};
int j = 0;
Handler handler = new Handler(); 
Runnable runit = new Runnable() { 

    @Override 
    public void run() { 
     try{

            for (; j < wc.length; j++) {

                blinks = wc[j];
                final String[] titles = {"" + blinks + ""};

                for (int i = 0; i < titles.length; i++) {
                    display.setText(titles[i]);
                }
                handler.postDelayed(this,5000);
            }
        }
        catch (Exception e) {
            //  handle exception
        }
    } 
}; 
handler.postDelayed(runit, 5000);



回答3:


  • Problem: The last iteration of the for-loop (on j) sets the text to the last string.

You need to make sure that you call TextView.setText() only once per tick. Then you can go with your approach (CountDownTimer) or with Antrrommet's (Handler). With your approach, this will look like something like:

int counter = 0; // field member, NOT local variable

@Override
public void onTick(long millisUntilFinished) {
    display.setText("{" + wc[counter++] + "}");
    if (counter == 5) counter = 0;  
}



回答4:


If the answer is useful. Please do vote :)

        final String[] gritArray = getResources().getStringArray(R.array.gritInformation);
    //creating new handler allows send and process message
        final Handler gritInfoHanlder = new Handler();
    //adding runnable to message queque
            gritInfoHanlder.post(new Runnable() {
    //initializing array position
                int tipPosition = 0;

                @Override
                public void run() {
                    //set number of tip(randon/another way)
//setting array to textview
                    gritInfo.setText(gritArray[tipPosition]);
                    tipPosition++;
//if array exist its length remove callback
                    if (tipPosition == gritArray.length) {
                        gritInfoHanlder.removeCallbacks(this);
//delayed handler 10 sec
                    } else {
                        gritInfoHanlder.postDelayed(this, 1000 * 10);
                    }
                }
            });


来源:https://stackoverflow.com/questions/31493683/update-textview-with-each-string-in-string-array-every-5-seconds

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!