需要帮助使用 android 菜单
Need help working with android menu
Android Studio 新手,我找不到任何对我来说有意义的东西来让菜单按我想要的方式工作。
我的应用程序将视频从我的网站流式传输到设备。该菜单包含 3 个要观看的视频的列表。我希望用户能够打开菜单,select 他们想要观看的视频,然后将该视频加载到播放器中。我一切正常,除了当您从菜单中单击视频时没有任何反应,我知道这是因为我的 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();
, 包含 selection 的 id 变量,将 url 字符串 + id 变量放在一起。所以像 String vidAddress = "http://www.mywebsite.com/vids/ + id;
之类的东西将包含在新的 @Override
部分中,并将处理一次加载新视频selected.
我在球场上吗?有人可以帮我找座位吗?
首先,值得一提的是,“@override”不是您为其创建实例的对象或事物,以防万一这就是您的意思。
意思是超级class,即被subclass编辑的class,有一个同名的方法,这个方法正在[=当前 class 中的 23=]。
所以对于你上面的情况,超级 class 'AppCompatActivity' 已经有一个方法 'onOptionsItemSelected' (例如)并且它被覆盖在你的 'MainActivity' class.
对于您的具体问题,您可以采用不同的方法,但如果您想快速检查它是否有效,您只需直接在 '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 之外,因此您也可以在其他地方使用它。
您不一定希望始终在回调本身内完成实际工作,但尝试上述方法至少会让您了解它是如何工作的,然后您可以决定是否要修改它。
Android Studio 新手,我找不到任何对我来说有意义的东西来让菜单按我想要的方式工作。
我的应用程序将视频从我的网站流式传输到设备。该菜单包含 3 个要观看的视频的列表。我希望用户能够打开菜单,select 他们想要观看的视频,然后将该视频加载到播放器中。我一切正常,除了当您从菜单中单击视频时没有任何反应,我知道这是因为我的 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();
, 包含 selection 的 id 变量,将 url 字符串 + id 变量放在一起。所以像 String vidAddress = "http://www.mywebsite.com/vids/ + id;
之类的东西将包含在新的 @Override
部分中,并将处理一次加载新视频selected.
我在球场上吗?有人可以帮我找座位吗?
首先,值得一提的是,“@override”不是您为其创建实例的对象或事物,以防万一这就是您的意思。
意思是超级class,即被subclass编辑的class,有一个同名的方法,这个方法正在[=当前 class 中的 23=]。
所以对于你上面的情况,超级 class 'AppCompatActivity' 已经有一个方法 'onOptionsItemSelected' (例如)并且它被覆盖在你的 'MainActivity' class.
对于您的具体问题,您可以采用不同的方法,但如果您想快速检查它是否有效,您只需直接在 '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 之外,因此您也可以在其他地方使用它。
您不一定希望始终在回调本身内完成实际工作,但尝试上述方法至少会让您了解它是如何工作的,然后您可以决定是否要修改它。