【问题标题】:I want to display multiple video in listview using video but not able to do this我想使用视频在列表视图中显示多个视频,但无法做到这一点
【发布时间】:2018-06-09 20:54:20
【问题描述】:

这是我的代码。

public class MainActivity extends Activity {
    ListView list;
    public ArrayList<String> videoList;
    public CustomListAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list =(ListView)findViewById(R.id.list);
        videoList = new ArrayList<String>();
        videoList.add("https://www.youtube.com/watch?v=Zgfi7wnGZlE");
        videoList.add("https://www.youtube.com/watch?v=Zgfi7wnGZlE");
        videoList.add("https://www.youtube.com/watch?v=Zgfi7wnGZlE");
        videoList.add("http://www.youtube.com/watch?v=DdlWPL53PvQ#sthash.fW5EtDFb.dpuf");
        Log.d("size of videoList:",""+ videoList.size());
        adapter = new CustomListAdapter(MainActivity.this, videoList);
        list.setAdapter(adapter);
    }
    public class CustomListAdapter extends BaseAdapter {
        private Activity activity;
        private LayoutInflater inflater;
        private ArrayList<String> videoList;

        public CustomListAdapter(Activity activity, ArrayList<String> videoList) {
            this.activity = activity;
            this.videoList = videoList;
        }

        @Override
        public int getCount() {
            return videoList.size();
        }

        @Override
        public Object getItem(int location) {
            return videoList.get(location);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            if (inflater == null)
                inflater = (LayoutInflater) activity
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if (convertView == null)
                convertView = inflater.inflate(R.layout.list_row, null);

              VideoView video = (VideoView)convertView.findViewById(R.id.video_view);
             video.setVideoPath(videoList.get(position));
             video.start();
             return convertView;
        }

    }    
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:divider="@color/list_divider"
        android:dividerHeight="1dp"
        android:listSelector="@drawable/list_row_selector" />

</RelativeLayout>

list_raw.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/list_row_selector"
    android:padding="8dp" >

    <!-- Thumbnail Image -->


    <VideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />


</RelativeLayout>

我无法获取视频,并且 logcat 中没有任何错误显示 那么是什么问题? 我在清单中添加了 Internet 权限是 any 还是需要权限或任何其他设置?

【问题讨论】:

  • @nidhi 我觉得加载更多,因为每个项目视图都尝试下载视频。但在列表视图中显示的最佳方式是拍摄拇指图像并在那里显示图像

标签: android


【解决方案1】:

我认为我们不应该将视频视图直接放在列表中,因为列表中的每个视图都被重绘或失效很多次,并且如果用户正在播放和观看任何视频并且他不小心将其滚动到屏幕之外, Android 操作系统将释放该内存,因此视频将再次从开始播放。 Video.start() 会被一次又一次调用

最佳解决方案是提供任何视频帧的缩略图。 用图像视图替换视频视图,然后单击它会打开一个新屏幕,在其中放置视频视图并在其上播放。

【讨论】:

【解决方案2】:

尝试设置VideoURI 而不是VideoPath 并再次检查,

VideoView video = (VideoView)convertView.findViewById(R.id.video_view);
MediaController mediaController = new MediaController(this); 
mediaController.setAnchorView(video);
video.setMediaController(mediaController);
video.setVideoURI(Uri.parse(videoList.get(position)));
video.start();

更新:如果您打算只使用 YouTube 中的视频,那么最好的方法是使用官方的 YouTube API。看这里,

Android YouTube app Play Video Intent

How to Play YouTube Video in Android App

【讨论】:

  • 我已添加此代码而不是设置 videopath 我已设置 videouri 仍然视频未显示在我的列表视图中我得到空白列表视图。
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 2020-03-23
  • 1970-01-01
相关资源
最近更新 更多