Android Studio新手,我无法找到任何对我有意义的菜单,让菜单以我想要的方式运行。
我的应用将视频从我的网站流式传输到设备。该菜单包含3个要观看的视频列表。我希望用户能够打开菜单,选择他们想要观看的视频,然后将该视频加载到播放器中。我已经完成了所有工作,但是当您点击菜单中的视频时没有任何反应,我知道这是因为我的 MainActivity.java
文件中没有代码。
这是 MainActivity.java
的样子:
package com.mywebsite.videostreamer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.net.Uri;
import android.widget.MediaController;
import android.widget.VideoView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
VideoView vidView = (VideoView) findViewById(R.id.myVideo);
String vidAddress = "http://www.mywebsite.com/vids/vidOne.mp4";
Uri vidUri = Uri.parse(vidAddress);
vidView.setVideoURI(vidUri);
MediaController vidControl = new MediaController(this);
vidControl.setAnchorView(vidView);
vidView.setMediaController(vidControl);
vidView.start();
vidView.seekTo(100);
vidView.pause();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
switch (item.getItemId()) {
case R.id.vidOne:
return true;
case R.id.vidTwo:
return true;
case R.id.vidThree:
return true;
}
return super.onOptionsItemSelected(item);
}
public void showPopup(MenuItem item) {
}
}
使用此代码和menu_main.xml
文件中的代码,我可以启动应用,点击菜单按钮查看可用视频列表,然后当我点击视频时,没有任何反应,因为我没有代码告诉它该怎么做。
我假设我需要创建 @Override
的另一个实例并拥有 int id = item.getItemId();
,即id变量包含选择,将url字符串+ id变量放在一起。像 String vidAddress = "http://www.mywebsite.com/vids/ + id;
这样的内容将包含在新的 @Override
部分中,并会在选中后处理新视频。
我在球场吗?有人能帮我找到座位吗?
答案 0 :(得分:1)
首先,值得一提的是' @ override'不是你创建实例的对象或事物,以防万一这就是你的意思。
这意味着超级类,即正在被子类化的类,具有相同名称的方法,并且这种方法被过度写入'在当前班级。
因此,对于您的上述情况,超类' AppCompatActivity'已经有一个方法' onOptionsItemSelected' (例如)这是在你的主要活动'类。
对于您的具体问题,您可以采取不同的方法,但如果您想检查它是否能够快速完成,您可以直接在' onOptionsItemSelected'中更改视频。码。换句话说,假设onCreate中的视频播放代码有效,则当用户点击第一个选项时,以下内容应更改视频:
public class MainActivity extends AppCompatActivity {
private VideoView vidView;
.
.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
switch (item.getItemId()) {
case R.id.vidOne: {
vidView.stopPlayback();
videoUri = Uri.parse("http://www.mywebsite.com/vids/NewVideo.mp4");
vidView.setVideoURI(videoUri);
vidView.start();
return true;
case R.id.vidTwo:
return true;
case R.id.vidThree:
return true;
}
return super.onOptionsItemSelected(item);
}
请注意,vidView的定义是在onCreate之外进行的,因此您也可以在其他地方使用它。
你不一定总是希望在回电本身内完成实际工作,但尝试上述工作至少会让你感觉它是如何工作的,你可以决定是否要修改它。