繁体   English   中英

需要帮助使用android菜单

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM