У меня есть четыре класса в моем приложении, которые имеют те же методы. В основном код отображает 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.
Если вы можете предоставить руководство по кодированию с образцами, это будет очень признательно. Благодарю.
Я немного запутался, почему у вас есть 4 классов, которые делают то же самое. В чем разница между ними? Изложите это сначала и объясните здесь. –
Четыре класса показывают время для различных упражнений. И каждый из них имеет другой textView для отображения на кнопке HowTo. Разница между классами - это textView, который они отображают. Например, скажем, это Activity1. Он запустит операцию, которая отображает сведения о Activity1. И Activity2 покажет детали Activity2. И так далее. – Adarsh
Когда вы запускаете эту операцию, вы можете указать дополнительные данные, указывающие, какое упражнение должно отображаться в текстовом виде. Вы можете использовать getIntent, чтобы вытащить эти данные в вашу деятельность. –