2013-12-21 4 views
0

У меня есть четыре класса в моем приложении, которые имеют те же методы. В основном код отображает CountDownTimer и воспроизводит музыку с началом таймера. Музыка останавливается, когда таймер заканчивается. Все четыре действия имеют один и тот же файл макета. Код ниже:Настройка общего класса

import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.preference.PreferenceManager; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.SeekBar; 
import android.widget.SeekBar.OnSeekBarChangeListener; 
import android.widget.TextView; 

public class Vyala extends Activity implements OnClickListener{ 
private static final int MILLIS_PER_SECOND = 1000; 
private static final int SECONDS_TO_COUNTDOWN = 1; 
TextView Time; 
int totalTimeText; 
MediaPlayer mp; 
Button startTimer, howTo; 
MediaPlayer bck; 
protected CountDownTimer PushUpTimer; 
protected int speed; 
int PracticeCount; 
AudioManager am; 
SeekBar sb; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.abhyasa); 
    getRefs(); 
    setTotalTime(); 
    startTimer.setOnClickListener(this); 

} 

private void getRefs() { 

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

    startTimer=(Button) findViewById (R.id.bStart); 
    howTo=(Button) findViewById(R.id.bHowTo); 
    howTo.setOnClickListener(this); 
    am=(AudioManager) getSystemService(Context.AUDIO_SERVICE); 
    mp = MediaPlayer.create(this, R.raw.sound2); 
    sb.setMax(am.getStreamMaxVolume(AudioManager.STREAM_MUSIC)); 
    sb.setProgress(am.getStreamVolume(AudioManager.STREAM_MUSIC)); 
    sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){ 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) 
     { 
//change the volume, displaying a toast message containing the current volume and playing a feedback sound 
     am.setStreamVolume(AudioManager.STREAM_MUSIC,progress, 0); 
     } 
    }); 
} 

     @Override 
     public boolean onKeyDown(int keyCode, KeyEvent event) 
     { 
    //if one of the volume keys were pressed 
     if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP) 
    { 
     //change the seek bar progress indicator position 
      sb.setProgress(am.getStreamVolume(AudioManager.STREAM_MUSIC)); 
    } 
    //propagate the key event 
    return super.onKeyDown(keyCode, event); 
    } 




    private void getTheCount() { 
    // TODO Auto-generated method stub 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
    int c=prefs.getInt("practicecount", 5); 
    PracticeCount=c; 


    } 


private void getSpeed() { 
    // TODO Auto-generated method stub 
    SharedPreferences  getPref=PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
    String values=getPref.getString("list","3"); 
    if(values.contentEquals("1")){ 
     speed=1; 
    }else if(values.contentEquals("5")){ 
     speed=5; 
    }else{ 
     speed=3; 
    } 
} 

private void setTotalTime() { 
    // TODO Auto-generated method stub 
    getSpeed(); 
    getTheCount(); 
    totalTimeText=PracticeCount*speed; 
    Time.setText(String.format("%02d", totalTimeText/60) + ":" +  String.format("%02d", totalTimeText % 60)); 
} 

    @Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
     if(v==startTimer){ 
     try { 
       showTimer(PracticeCount*speed*SECONDS_TO_COUNTDOWN * MILLIS_PER_SECOND); 

      } catch (NumberFormatException e) { 
       // method ignores invalid (non-integer) input and waits 
       // for something it cant use 
      } 
     } 
     } 
    private void showTimer(int countdownMillis) { 
      if(PushUpTimer != null) { PushUpTimer.cancel(); } 
      PushUpTimer = new CountDownTimer(countdownMillis, MILLIS_PER_SECOND) { 
      @Override 
      public void onTick(long millisUntilFinished) { 
       mp.start(); 
       long seconds = millisUntilFinished/1000; 
       Time.setText(String.format("%02d", seconds/60) + ":" + String.format("%02d", seconds % 60)); 

      } 
      @Override 
      public void onFinish() { 
       Time.setText("KABOOM!"); 
       mp.release(); 
      } 
      }.start(); 
     } 
} 

И это файл макета:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

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

<LinearLayout 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_above="@+id/tvTime" 
android:layout_alignParentLeft="true" 
android:orientation="horizontal" > 

<Button 
    android:id="@+id/bStart" 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/tvTime" 
    android:layout_alignLeft="@+id/bPause" 
    android:layout_marginBottom="21dp" 
    android:layout_marginLeft="24dp" 
    android:text="Start" /> 

<Button 
    android:id="@+id/bPause" 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/bStart" 
    android:layout_alignBottom="@+id/bStart" 
    android:layout_alignLeft="@+id/bHowTo" 
    android:layout_marginLeft="34dp" 
    android:text="Pause" /> 
</LinearLayout> 

<TextView 
android:id="@+id/count" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_below="@+id/bHowTo" 
android:layout_centerHorizontal="true" 
android:layout_marginTop="41dp" 
android:text="25" 
android:textSize="80sp" /> 

<Button 
android:id="@+id/bHowTo" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentTop="true" 
android:layout_marginTop="78dp" 
android:layout_toRightOf="@+id/count" 
android:text="How" /> 
    </RelativeLayout> 

Как я создать общий класс, который все четыре вида деятельности можно реализовать? Поскольку это экономит место и является лучшим способом кодирования. Я читал, что создание фрагмента - хорошее решение, но я не мог понять документацию, предоставленную веб-сайтом разработчика Android.
Если вы можете предоставить руководство по кодированию с образцами, это будет очень признательно. Благодарю.

+0

Я немного запутался, почему у вас есть 4 классов, которые делают то же самое. В чем разница между ними? Изложите это сначала и объясните здесь. –

+0

Четыре класса показывают время для различных упражнений. И каждый из них имеет другой textView для отображения на кнопке HowTo. Разница между классами - это textView, который они отображают. Например, скажем, это Activity1. Он запустит операцию, которая отображает сведения о Activity1. И Activity2 покажет детали Activity2. И так далее. – Adarsh

+0

Когда вы запускаете эту операцию, вы можете указать дополнительные данные, указывающие, какое упражнение должно отображаться в текстовом виде. Вы можете использовать getIntent, чтобы вытащить эти данные в вашу деятельность. –

ответ

0

Это должно работать и есть то, что вы хотите в соответствии с моим пониманием.

public class redundant { 

private Context _context; 

    public redundant(Context context){ 
     this._context = context; 
    } 

    private void showTimer(int countdownMillis,MediaPlayer m,TextView v) { 
       if(PushUpTimer != null) { PushUpTimer.cancel(); } 
       PushUpTimer = new CountDownTimer(countdownMillis, MILLIS_PER_SECOND) { 
       @Override 
       public void onTick(long millisUntilFinished) { 
        m.start(); 
        long seconds = millisUntilFinished/1000; 
        Time.setText(String.format("%02d", seconds/60) + ":" + String.format("%02d", seconds % 60)); 

       } 
       @Override 
       public void onFinish() { 
        v.setText("KABOOM!"); 
        m.release(); 
       } 
       }.start(); 
      } 
} 

использование его в деятельности, как:

Redundant r = new Redundant(activity.this); 
r.showTimer(2000,mediaplayerobject,textview) 
Смежные вопросы