如何设置 ListView 项目单击使用开关位置在单独类的视频视图中每行播放一个本地视频文件?
Posted
技术标签:
【中文标题】如何设置 ListView 项目单击使用开关位置在单独类的视频视图中每行播放一个本地视频文件?【英文标题】:How to set the ListView item click using switch position to play one local video file per row in video view of seperate class? 【发布时间】:2013-01-13 20:10:37 【问题描述】:我有一个列表视图,它是从一组项目名称中填充的。它由 List(类)和 list_item(布局)设置。现在,我为 listview 行设置了单击侦听器,以在使用 ClipsActivity (class) activity_clips(layout) 设置的 VideoView 中播放视频。
问题:单击 ListView 中的行时,下一个活动 (ClipsActivity) 会加载警报“抱歉,无法播放此视频”。我肯定在资产文件夹中有视频文件。我相信 - 问题可能在于字符串从 ClickListener 传递/解析到 videoview 的方式。希望有人能帮助我。
用于 List 类的代码
package com.abcdef.list;
//import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
//import android.widget.AdapterView;
//import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
//import android.widget.TextView;
public class List extends ListActivity
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
// storing string resources into Array
String[] clips_files = getResources().getStringArray(R.array.clips_files);
// Binding resources Array to ListAdapter
this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, clips_files));
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
super.onListItemClick(l, v, position, id);
change(position);
void change(int position)
Intent intent = new Intent(getApplicationContext(), ClipsActivity.class);
switch(position)
case 0 :
intent.setData(Uri.parse("file:///android_asset/A1.mp4"));
break;
case 1 :
intent.setData(Uri.parse("file:///android_asset/A2.mp4"));
break;
case 2 :
intent.setData(Uri.parse("file:///android_asset/A3.mp4"));
break;
case 3 :
intent.setData(Uri.parse("file:///android_asset/A4.mp4"));
break;
startActivity(intent);
这是用于带有 VideoView 的 ClipsActivity 类的代码
包 com.abcde.list;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;
import java.net.URI;
@SuppressWarnings("unused")
public class ClipsActivity extends Activity
VideoView mVideoView;
MediaController mc;
// String uriPath;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_clips);
final VideoView mVideoView = (VideoView)findViewById(R.id.videoview);
MediaController mc = new MediaController(this);
mc.setAnchorView(mVideoView);
mVideoView.setMediaController(mc);
mVideoView.setVideoPath((getIntent().getDataString());
mVideoView.start();
mVideoView.setOnCompletionListener(
new MediaPlayer.OnCompletionListener()
public void onCompletion(MediaPlayer mp)
mVideoView.start();
);
【问题讨论】:
【参考方案1】:您必须将视频复制到项目的 res/raw 文件夹中,而不是从资产访问。在 res 文件夹下创建 raw 文件夹。它必须采用受支持的格式(3gp、wmv、mp4)并在其文件名中使用小写字母、数字、下划线和点命名:video_file.mp4。
VideoView view = (VideoView)findViewById(R.id.videoView);
String path = "android.resource://" + getPackageName() + "/" + R.raw.video_file;
view.setVideoURI(Uri.parse(path));
view.start();
【讨论】:
我应该如何在列表视图的 clicklistener 中编写代码来为开关位置设置正确的视频文件,我应该如何为视频视图设置它?这很有趣, 您应该在意图中添加一个额外的内容,以确定要播放的视频。例如,将一个整数值传递给 ClipsActivity intent.putExtra("videoID", videoID);然后通过 int id = getIntent().getExtras.getInt("videoID"); 得到那个整数;以上是关于如何设置 ListView 项目单击使用开关位置在单独类的视频视图中每行播放一个本地视频文件?的主要内容,如果未能解决你的问题,请参考以下文章
Espresso - 如何定位并单击ListView中的第一个项目
如何获取listView位置值并通过intent传递给另一个类