[英]Need help working with android menu
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
部分中,并在选定后处理新视频的加载。
我在球场上吗? 有人可以帮我找到我的位子吗?
首先,值得一提的是,“ @ override”不是您创建实例的对象或事物,以防万一,这就是您的意思。
这意味着超类(即被子类化的类)具有相同名称的方法,并且该方法在当前类中被“覆盖”。
因此,对于上述情况,超级类“ AppCompatActivity”已经具有方法“ onOptionsItemSelected”(例如),并且该类已被覆盖在“ MainActivity”类中。
对于您的特定问题,可以采用不同的方法,但是如果要检查它是否正在快速运行,则可以直接在“ 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之外,因此您也可以在其他地方使用它。
您不一定要始终在回叫本身中进行实际工作,但是尝试上述操作至少可以使您对它的工作方式有一定的了解,然后可以决定是否要对其进行修改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.