2013-02-11 14 views
29

मैं देख ली है और कुछ भी नहीं है मैं अब तक क्या कोशिश की है से काम कर रहा है ...अद्यतन TextView हर दूसरा

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.deskclock); 

    TextView tvTime = (TextView) findViewById(R.id.tvTime); 
    TextView tvDate = (TextView) findViewById(R.id.tvDate); 

    java.util.Date noteTS = Calendar.getInstance().getTime(); 

    String time = "hh:mm"; // 12:00 
    tvTime.setText(DateFormat.format(time, noteTS)); 

    String date = "dd MMMMM yyyy"; // 01 January 2013 
    tvDate.setText(DateFormat.format(date, noteTS)); 

मैं मूल रूप से setText तरीकों को अपडेट करने या हर दूसरे या तो ताज़ा करने के लिए चाहते हैं , इसलिए मेरी घड़ी वास्तव में काम करती है जैसे इसे करना चाहिए। मैंने हैंडलर और रन जैसे तरीकों को देखा है और कुछ भी काम नहीं किया है, इसलिए इसके साथ कोई मदद बहुत अच्छा होगा। :)

+0

"Ive संचालकों और रन विधि और कुछ भी नहीं देखा तरह बातें एक टाइमर कुछ का उपयोग कर चल रहा है काम किया "- वास्तव में" कुछ भी काम नहीं किया "मतलब क्या है? – Egor

उत्तर

83

अपने OnCreate() विधि में कोड निम्नलिखित जोड़ें:

Thread t = new Thread() { 

    @Override 
    public void run() { 
    try { 
     while (!isInterrupted()) { 
     Thread.sleep(1000); 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
      // update TextView here! 
      } 
     }); 
     } 
    } catch (InterruptedException e) { 
    } 
    } 
}; 

t.start(); 

इस कोड को एक धागा जो 1000 मिलिसेकंड हर दौर सोता है शुरू होता है।

+0

अब काम करना बहुत बहुत धन्यवाद। :) आईडी आपको वोट दे रहा है लेकिन मुझे पर्याप्त प्रतिष्ठा नहीं है – Timmo

+0

ओह एक बात, क्या यह 'सुरक्षित' है ताकि इसे 1000 के बजाय 500 मिलीसेकंड पर सेट किया जा सके? – Timmo

+13

यह विधि बिल्कुल अच्छी नहीं है, यह "मुख्य" थ्रेड 1000 के लिए सोती है, जो हानिकारक है! –

12

@endian के उत्तर को विस्तारित करते हुए, आप थ्रेड का उपयोग कर सकते हैं और TextView को अपडेट करने के लिए एक विधि कॉल कर सकते हैं। नीचे कुछ कोड है जो मैंने स्पॉट पर बनाया था।

java.util.Date noteTS; 
String time, date; 
TextView tvTime, tvDate; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.deskclock); 

    tvTime = (TextView) findViewById(R.id.tvTime); 
    tvDate = (TextView) findViewById(R.id.tvDate); 

    Thread t = new Thread() { 

     @Override 
     public void run() { 
      try { 
       while (!isInterrupted()) { 
        Thread.sleep(1000); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          updateTextView(); 
         } 
        }); 
       } 
      } catch (InterruptedException e) { 
      } 
     } 
    }; 

    t.start(); 
} 

private void updateTextView() { 
    noteTS = Calendar.getInstance().getTime(); 

    String time = "hh:mm"; // 12:00 
    tvTime.setText(DateFormat.format(time, noteTS)); 

    String date = "dd MMMMM yyyy"; // 01 January 2013 
    tvDate.setText(DateFormat.format(date, noteTS)); 
} 
+0

सभी सॉर्ट किए गए इनपुट के लिए धन्यवाद अब सहायता – Timmo

+2

के लिए धन्यवाद जब गतिविधि i.e. को रोकता है(), इसे भी रोका जाना चाहिए – seema

1

उपयोग TextSwitcher (अच्छा पाठ संक्रमण एनीमेशन के लिए) और इसके बजाय टाइमर।

5

आप थ्रेड के बजाय टाइमर का उपयोग कर सकते हैं। यह मेरा कोड है

package dk.tellwork.tellworklite.tabs; 

import java.util.Timer; 
import java.util.TimerTask; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import dk.tellwork.tellworklite.MainActivity; 
import dk.tellwork.tellworklite.R; 

@SuppressLint("HandlerLeak") 
public class HomeActivity extends Activity { 
    Button chooseYourAcitivity, startBtn, stopBtn; 
    TextView labelTimer; 
    int passedSenconds; 
    Boolean isActivityRunning = false; 
    Timer timer; 
    TimerTask timerTask; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tab_home); 

     chooseYourAcitivity = (Button) findViewById(R.id.btnChooseYourActivity); 
     chooseYourAcitivity.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //move to Activities tab 
       switchTabInActivity(1); 
      } 
     }); 

     labelTimer = (TextView)findViewById(R.id.labelTime); 
     passedSenconds = 0; 

     startBtn = (Button)findViewById(R.id.startBtn); 
     startBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if (isActivityRunning) { 
        //pause running activity 
        timer.cancel(); 
        startBtn.setText(getString(R.string.homeStartBtn)); 
        isActivityRunning = false; 
       } else { 
        reScheduleTimer(); 
        startBtn.setText(getString(R.string.homePauseBtn)); 
        isActivityRunning = true; 
       } 
      } 
     }); 

     stopBtn = (Button)findViewById(R.id.stopBtn); 
     stopBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       timer.cancel(); 
       passedSenconds = 0; 
       labelTimer.setText("00 : 00 : 00"); 
       startBtn.setText(getString(R.string.homeStartBtn)); 
       isActivityRunning = false; 
      } 
     }); 
    } 

    public void reScheduleTimer(){ 
     timer = new Timer(); 
     timerTask = new myTimerTask(); 
     timer.schedule(timerTask, 0, 1000); 
    } 

    private class myTimerTask extends TimerTask{ 
     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      passedSenconds++; 
      updateLabel.sendEmptyMessage(0); 
     } 
    } 

    private Handler updateLabel = new Handler(){ 
     @Override 
     public void handleMessage(Message msg) { 
      // TODO Auto-generated method stub 
      //super.handleMessage(msg); 

      int seconds = passedSenconds % 60; 
      int minutes = (passedSenconds/60) % 60; 
      int hours = (passedSenconds/3600); 
      labelTimer.setText(String.format("%02d : %02d : %02d", hours, minutes, seconds)); 
     } 
    }; 

    public void switchTabInActivity(int indexTabToSwitchTo){ 
     MainActivity parentActivity; 
     parentActivity = (MainActivity) this.getParent(); 
     parentActivity.switchTab(indexTabToSwitchTo); 
    } 
} 
12

यह एक बहुत पुराना सवाल है और मुझे यकीन है कि वहां बहुत सारे संसाधन हैं। लेकिन शब्द को सुरक्षित पक्ष में फैलाने के लिए कभी भी बहुत कुछ नहीं है। वर्तमान में, यदि कोई और कभी भी ओपी से क्या हासिल करना चाहता है, तो आप इसका उपयोग कर सकते हैं: android.widget.TextClock

टेक्स्टक्लॉक दस्तावेज़ here

यहाँ मैं क्या उपयोग किया है:

<android.widget.TextClock 
    android:id="@+id/digitalClock" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:timeZone="GMT+0000" <!--Greenwich --> 
    android:format24Hour="dd MMM yyyy k:mm:ss" 
    android:format12Hour="@null" 
    android:textStyle="bold" 
    android:layout_alignParentEnd="true" /> 
6

आप TextView तो बेहतर इस्तेमाल पर समय दिखाना चाहते हैं तो Chronometer या TextClock

घड़ी का उपयोग करना: यह API 1 में जोड़ा गया है यह है इसे अनुकूलित करने के लिए बहुत सारे विकल्प।

Your xml

<Chronometer 
    android:id="@+id/chronometer" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="30sp" /> 

Your activity

Chronometer mChronometer=(Chronometer) findViewById(R.id.chronometer); 
mChronometer.setBase(SystemClock.elapsedRealtime()); 
mChronometer.start(); 

TestClock का उपयोग करना: इस विजेट एपीआई स्तर 17.I व्यक्तिगत रूप से घड़ी की तरह में शुरू की है।

Your xml

<TextClock 
    android:id="@+id/textClock" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="30dp" 
    android:format12Hour="hh:mm:ss a" 
    android:gravity="center_horizontal" 
    android:textColor="#d41709" 
    android:textSize="44sp" 
    android:textStyle="bold" /> 

Thats यह, आप कर रहे हैं।

आप इनमें से किसी भी विजेट का उपयोग कर सकते हैं। यह आपके जीवन को आसान बना देगा।

0

आप इसके लिए TimerTask का भी उपयोग कर सकते हैं।

यहाँ एक विधि

private void setTimerTask() { 
    long delay = 3000; 
    long periodToRepeat = 60 * 1000; /* 1 mint */ 
    Timer timer = new Timer(); 
    timer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
       // do your stuff here. 
       } 
      }); 
     } 
    }, 3000, 3000); 
} 
0

यह बेहतर होगा कि तुम सिर्फ इस्तेमाल किया एक AsyncTask की तरह इस

Timer LAIATT = new Timer(); 
    TimerTask LAIATTT = new TimerTask() 
    { 
     @Override 
     public void run() 
     { 
      LoadAccountInformationAsyncTask LAIAT = new LoadAccountInformationAsyncTask(); 
      LAIAT.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
     } 
    }; 
    LAIATT.schedule(LAIATTT, 0, 1000); 
संबंधित मुद्दे