2013-12-20 2 views
2

Я новичок в андроиде, и я написал работу. Он содержит CountDownTimer, который отсчитывает от определенного значения. Он также содержит кнопку, которая загружает текстовую информацию и текстовое изображение для отображения счетчика.Создание Singleton CountDownTimer в Android

Ниже приведен код для Activity1:

public class Screen extends Activity1 implements OnClickListener { 
private static final int MILLIS_PER_SECOND = 1000; 
private static final int SECONDS_TO_COUNTDOWN = 1; 
TextView Time; 
int totaltime; 
Button startTimer, howTo, pause; 
protected CountDownTimer MyTimer; 
int PracticeCount; 
long tot; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.pushupscreen); 
    getRefs(); 
    getSpeed(); 
      getCount(); 
    setTotalTime(); 
    startTimer.setOnClickListener(this); 
    pause.setOnClickListener(this); 
} 

private void getRefs() { 
    // Initialize layout resources 
    Time = (TextView) findViewById(R.id.tvTime); 

    startTimer = (Button) findViewById(R.id.bStart); 
    howTo = (Button) findViewById(R.id.btHowTo); 
    pause = (Button) findViewById(R.id.bPause); 
    howTo.setOnClickListener(this); 

} 

    private void getTheCount() { 
//get count from SharedPreferences 
     } 



    private void getSpeed() { 
    //get speed from SharedPreferences 
      } 

private void setCount(){ 
     totalTime=speed*count;} 


@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    if (v == startTimer) { 

     try { 
      showTimer(time); 

     } catch (NumberFormatException e) { 
      // method ignores invalid (non-integer) input and waits 
      // for something it cant use 
     } 
    } else if (v == pause) { 
     MyTimer.cancel(); 
     Timer.setText("Resume"); 
    } else if (v == howTo) { 

     //Launch screen containing information 
    } 
} 

private void showTimer(long time) { 
    if (MyTimer != null) { 
     MyTimer.cancel(); 
    } 

    MyTimer = new CountDownTimer(tot2, MILLIS_PER_SECOND) { 
     @Override 
     public void onTick(long millisUntilFinished) { 
      tot = millisUntilFinished; 
      long seconds = millisUntilFinished/1000; 
      Time.setText(String.format("%02d", seconds/60) + ":" 
        + String.format("%02d", seconds % 60)); 

     } 

     @Override 
     public void onFinish() { 
      Time.setText("KABOOM!"); 

     } 
    }.start(); 
} 

}

А вот файл макета для этого:

<TextView 
    android:id="@+id/tvTime" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:gravity="center" 
    android:padding="10dip" 
    android:text="@string/starttime" 
    android:textSize="60sp" /> 

<Button 
    android:id="@+id/bStart" 
    android:layout_width="150dp" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/tvTime" 
    android:text="Start" /> 

<Button 
    android:id="@+id/bPause" 
    android:layout_width="150dp" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/tvTime" 
    android:layout_toRightOf="@+id/btHowTo" 
    android:text="Pause" /> 

<TextView 
    android:id="@+id/tvCount" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/btHowTo" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="39dp" 
    android:text="25" 
    android:textSize="80sp" 
    android:textAlignment="center"/> 

Мои вопросы:

1. Как я могу создать 4 действия, которые используют один и тот же макет и один и тот же таймер? Каждая активность загружает другой контент в текстовое окно и другой экран при нажатии кнопки «Хоум».
2. Как может Activity1 быть запрограммированным на 1/4 время, установленное и оставшееся время до Activity2? Является ли это возможным?

Я бы очень признателен за любую помощь и советы, которые вы можете предоставить. Благодарю.

ответ

1

Пара вещей здесь.

  1. Его очень легко повторить использование макетов. В onCreate каждого действия вы просто вызываете: setContentView (R.layout.pushupscreen); Таким образом, файл pushupscreen.xml может использоваться для всех видов деятельности.

  2. Что вы, вероятно, захотите сделать, это сохранить временную метку для некоторого общего источника данных для всех видов деятельности. Это может быть запись в файл SharedPreferences: Documentation here. Затем по мере возобновления каждого действия проверьте, сколько времени уже прошло, сравнивая эту метку времени с текущей меткой времени. Вы также можете передать временную метку в качестве дополнительного в целях запуска последующих действий. Документации, которая может быть найдена here и here

+0

примечание, вам нужно будет создать Bundle (http://developer.android.com/reference/android/os/Bundle.html), и добавить метку долго к нему. – akhalsa

0
  1. Вы могли бы сделать пользовательский элемент управления, который является в основном новый класс, который наследует класс какого-то другого элемента управления (например, LinearLayout или RelativeLayout). Затем вы можете загрузить XML-представление в свой новый макет или программно создать новые элементы управления внутри вашего элемента управления. Больше информации здесь: Custom components in Android

  2. После 1/4 периода обратного отсчета вы можете создать и отправить намерение, чтобы начать новую деятельность в методе onTick. Вы также можете поместить оставшиеся 3/4 в миллисекунду (тип long) в намерении дополнительно. Затем вы можете получить это значение в новом действии и вызвать для него специальный счетчик CountDownTimer для остальной части вашего обратного отсчета. Затем вы можете, наконец, выполнить то, что хотите, после того, как обратный отсчет сделан в методе onFinish().

+0

Я хочу, чтобы текстовое изображение tvTimer отображало общее время обратного отсчета - скажем, 20 минут. Это время для всех четырех действий.И в каждом действии я хочу, чтобы граф textView подсчитывал с каждым onTick() в течение 1/4 раза. Как мне это сделать? – Adarsh