Prudhvi
Prudhvi

Reputation: 2343

How to update TextView dynamically (periodically)?

I am developing a simple android activity with a scrollable TextView. I am displaying numbers from 1-100 in my TextView with a time delay. However my desired output is not what I'm getting.

Current Output: 1 replaced by 2 replaced by 3....till 100.
Desired Output:
1
2
3
4
.
.
100

Here is my Activity code:

    public class MainActivity extends ActionBarActivity {

        private static int i = 0;
        TextView textView;
        Handler handler;
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main_page);

            textView = (TextView) findViewById(R.id.text_area);
            new PrimeCalculation().execute();

            handler = new Handler();
            handler.post(updateView);
       }
       private Runnable updateView = new Runnable() {

            @Override
            public void run() {
                if(i <= 100) {
                    textView.setText(Integer.toString(i));
                    i++;
                    handler.postDelayed(this, 1000);
                }
            }
        }; 
    }

Upvotes: 0

Views: 2106

Answers (4)

RajSharma
RajSharma

Reputation: 1971

You can use following code......

public class MainActivity extends ActionBarActivity {

private static int i = 0;
TextView textView;
Handler handler;
String textViewText="";

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView = (TextView) findViewById(R.id.text_area);

    handler = new Handler();
    handler.post(updateView);
}
private Runnable updateView = new Runnable() {

    @Override
    public void run() {
        if(i <= 100) {

// textViewText=textViewText+Integer.toString(i)+" ";

            textView.setText(textViewText);

// textViewText=textViewText+textView.getText().toString();

            i++;
            handler.postDelayed(this, 1000);
        }
    }
};}

I hope it will help you....

Upvotes: 0

Fahim
Fahim

Reputation: 12358

Try this

private Handler mHandler = new Handler();
private int nCounter = 0;

View.OnClickListener mButtonStartListener = new OnClickListener() {
    public void onClick(View v) {
        try {
            mHandler.removeCallbacks(hMyTimeTask);
         //        Parameters
         //        r  The Runnable that will be executed. 
         //        delayMillis  The delay (in milliseconds) until the Runnable will be executed. 
                       mHandler.postDelayed(hMyTimeTask, 1000); // delay 1 second
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
};


private Runnable hMyTimeTask = new Runnable() {
           nCounter++;
               hTextView.append("\n"+nCounter); 
       }
       public void run() {
    }; 

Hope this will help you

Upvotes: 0

Emanuel Moecklin
Emanuel Moecklin

Reputation: 28856

How about this:

textView.setText(textView.getText() + "\n" + i);

Upvotes: 3

Ethan
Ethan

Reputation: 175

Create a new String Array. Set the text view to the array.toString(); Every time that your timer runs out insert the most recent number into the array and repeat. The most recent number should be an int that increases when the timer runs out. Hope this helps!

Upvotes: 1

Related Questions