[英]How can I make this code more efficient?
我正在制作一個 Android 應用程序,基本上只需按一下按鈕即可播放來自網站的視頻。 正如您在下面的代碼中看到的那樣,我有 8 個不同的按鈕,可以播放 8 個不同的視頻。 我是編程新手,一切正常,但我知道這不是編寫它的最佳方式。
有沒有一種方法可以用更少的代碼行來做同樣的事情?
package biz.slwdesign.tvlocallysouthdevon;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.MediaController;
import android.widget.VideoView;
public class Watch extends Activity implements OnClickListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
setContentView(R.layout.watch);
//ImageButton1
ImageButton video1 = (ImageButton) findViewById(R.id.ImageButton1);
video1.setOnClickListener(this);
//ImageButton2
ImageButton video2 = (ImageButton) findViewById(R.id.ImageButton2);
video2.setOnClickListener(this);
//ImageButton3
ImageButton video3 = (ImageButton) findViewById(R.id.ImageButton3);
video3.setOnClickListener(this);
//ImageButton4
ImageButton video4 = (ImageButton) findViewById(R.id.ImageButton4);
video4.setOnClickListener(this);
//ImageButton5
ImageButton video5 = (ImageButton) findViewById(R.id.ImageButton5);
video5.setOnClickListener(this);
//ImageButton6
ImageButton video6 = (ImageButton) findViewById(R.id.ImageButton6);
video6.setOnClickListener(this);
//ImageButton7
ImageButton video7 = (ImageButton) findViewById(R.id.ImageButton7);
video7.setOnClickListener(this);
//ImageButton7
ImageButton video8 = (ImageButton) findViewById(R.id.ImageButton8);
video8.setOnClickListener(this);
}
public void onClick(View v) {
if(v.getId() == R.id.ImageButton1){
setContentView(R.layout.watch);
VideoView videoview1 = (VideoView) findViewById(R.id.videoView1);
videoview1.setMediaController(new MediaController(this));
videoview1.setVideoPath("http://slwdesign.biz/android/austins.mp4");
videoview1.start();
videoview1.requestFocus();
videoview1.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer videoview) {
}
});
}
if (v.getId() == R.id.ImageButton2){
setContentView(R.layout.watch);
VideoView videoview1 = (VideoView) findViewById(R.id.videoView1);
videoview1.setMediaController(new MediaController(this));
videoview1.setVideoPath("http://slwdesign.biz/android/brownsWigs.mp4");
videoview1.start();
videoview1.requestFocus();
}
if (v.getId() == R.id.ImageButton3){
setContentView(R.layout.watch);
VideoView videoview1 = (VideoView) findViewById(R.id.videoView1);
videoview1.setMediaController(new MediaController(this));
videoview1.setVideoPath("http://slwdesign.biz/android/frames&Boxes.mp4");
videoview1.start();
videoview1.requestFocus();
}
if (v.getId() == R.id.ImageButton4){
setContentView(R.layout.watch);
VideoView videoview1 = (VideoView) findViewById(R.id.videoView1);
videoview1.setMediaController(new MediaController(this));
videoview1.setVideoPath("http://slwdesign.biz/android/hatMckool.mp4");
videoview1.start();
videoview1.requestFocus();
}
if(v.getId() == R.id.ImageButton5){
setContentView(R.layout.watch);
VideoView videoview1 = (VideoView) findViewById(R.id.videoView1);
videoview1.setMediaController(new MediaController(this));
videoview1.setVideoPath("http://slwdesign.biz/android/gardenTime.mp4");
videoview1.start();
videoview1.requestFocus();
}
if (v.getId() == R.id.ImageButton6){
setContentView(R.layout.watch);
VideoView videoview1 = (VideoView) findViewById(R.id.videoView1);
videoview1.setMediaController(new MediaController(this));
videoview1.setVideoPath("http://slwdesign.biz/android/paulBarclay.mp4");
videoview1.start();
videoview1.requestFocus();
}
if (v.getId() == R.id.ImageButton7){
setContentView(R.layout.watch);
VideoView videoview1 = (VideoView) findViewById(R.id.videoView1);
videoview1.setMediaController(new MediaController(this));
videoview1.setVideoPath("http://slwdesign.biz/android/fishShed.mp4");
videoview1.start();
videoview1.requestFocus();
}
if(v.getId() == R.id.ImageButton8){
setContentView(R.layout.watch);
VideoView videoview1 = (VideoView) findViewById(R.id.videoView1);
videoview1.setMediaController(new MediaController(this));
videoview1.setVideoPath("http://slwdesign.biz/android/offBoutique.mp4");
videoview1.start();
videoview1.requestFocus();
}
}
}
在 xml 文件中,設置此屬性 android:onClick="onClick" 而不是初始化 ImageButton 實例
給點建議:
1.使用Map保存id和視頻url。
//init the video url map in onCreate method
videoMap = new HashMap<Integer, String>();
videoMap.put(R.id.ImageButton1, "http://slwdesign.biz/android/austins.mp4");
...
//then init the onClickListener
Set<Integer> idSets = videoMap.keySet();
for(int id:idSets){
ImageButton button = (ImageButton)findViewById(id);
button.setOnClickListener(this);
}
//only init once
videoview1 = (VideoView) findViewById(R.id.videoView1);
另外,如果你在 xml 中設置android:onClick="onClick"
,可以取消onClickListener
init 的循環。
2.onClick方法:
//onclick
String url = videoMap.get(v.getId());
if(url!=null){
videoview1.setMediaController(new MediaController(this));
videoview1.setVideoPath(url);
videoview1.start();
videoview1.requestFocus();
}
例如,您可以這樣縮短代碼:
創建一個將R.id.*
鏈接到videoPath
的HashMap<Integer, String>
(可能是static
)。 然后將鍵集迭代到setOnClickListener
,並在onClick
中根據 ID 查找路徑。
編輯:關於那種方式
private static final LinkedHashMap<Integer, String> ID_MAP = new LinkedHashMap<Integer, String>();
static {
ID_MAP.put(R.id.button1, "http://video1.avi");
ID_MAP.put(R.id.button2, "http://video2.avi");
ID_MAP.put(R.id.button3, "http://video3.avi");
ID_MAP.put(R.id.button4, "http://video4.avi");
ID_MAP.put(R.id.button5, "http://video5.avi");
}
private final Button[] mButtons = new Button[ID_MAP.size()];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int i = 0;
for (int id : ID_MAP.keySet()) {
mButtons[i] = (Button) findViewById(id);
mButtons[i].setOnClickListener(this);
i++;
}
}
@Override
public void onClick(View v) {
int id = v.getId();
String url = ID_MAP.get(id);
// set url etc
}
您可以通過這種方式節省一些代碼行。
package biz.slwdesign.tvlocallysouthdevon;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.MediaController;
import android.widget.VideoView;
public class Watch extends Activity implements OnClickListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
setContentView(R.layout.watch);
//ImageButton1
ImageButton video1 = (ImageButton) findViewById(R.id.ImageButton1);
video1.setOnClickListener(this);
//ImageButton2
ImageButton video2 = (ImageButton) findViewById(R.id.ImageButton2);
video2.setOnClickListener(this);
//ImageButton3
ImageButton video3 = (ImageButton) findViewById(R.id.ImageButton3);
video3.setOnClickListener(this);
//ImageButton4
ImageButton video4 = (ImageButton) findViewById(R.id.ImageButton4);
video4.setOnClickListener(this);
//ImageButton5
ImageButton video5 = (ImageButton) findViewById(R.id.ImageButton5);
video5.setOnClickListener(this);
//ImageButton6
ImageButton video6 = (ImageButton) findViewById(R.id.ImageButton6);
video6.setOnClickListener(this);
//ImageButton7
ImageButton video7 = (ImageButton) findViewById(R.id.ImageButton7);
video7.setOnClickListener(this);
//ImageButton7
ImageButton video8 = (ImageButton) findViewById(R.id.ImageButton8);
video8.setOnClickListener(this);
}
public void onClick(View v) {
setContentView(R.layout.watch);
VideoView videoview1 = (VideoView) findViewById(R.id.videoView1);
videoview1.setMediaController(new MediaController(this));
if(v.getId() == R.id.ImageButton1){
videoview1.setVideoPath("http://slwdesign.biz/android/austins.mp4");
}
if (v.getId() == R.id.ImageButton2){
videoview1.setVideoPath("http://slwdesign.biz/android/brownsWigs.mp4");
}
if (v.getId() == R.id.ImageButton3){
videoview1.setVideoPath("http://slwdesign.biz/android/frames&Boxes.mp4");
}
if (v.getId() == R.id.ImageButton4){
videoview1.setVideoPath("http://slwdesign.biz/android/hatMckool.mp4");
}
if(v.getId() == R.id.ImageButton5){
videoview1.setVideoPath("http://slwdesign.biz/android/gardenTime.mp4");
}
if (v.getId() == R.id.ImageButton6){
videoview1.setVideoPath("http://slwdesign.biz/android/paulBarclay.mp4");
}
if (v.getId() == R.id.ImageButton7){
videoview1.setVideoPath("http://slwdesign.biz/android/fishShed.mp4");
}
if(v.getId() == R.id.ImageButton8){
videoview1.setVideoPath("http://slwdesign.biz/android/offBoutique.mp4");
}
videoview1.start();
videoview1.requestFocus();
}
希望我沒有忽略任何事情。
絕對最好的方法是在布局 XML 中定義On Click
Click 方法,你必須為每個按鈕編寫一個On Click
方法,這種方式對我來說比很多條件更清晰,然后永遠不要寫相同的代碼行兩次或更多次將它們分組在一個方法中,然后從需要的地方調用該方法。
我寧願為您的代碼類型使用 switch, case 而不是 if 語句。 問候。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.