android studio中fragment_home中VideoView中的空引用
我正在构建像tiktok这样的简单应用程序,其中我在fragment_home的VideoView中获得错误空引用。我在谷歌上搜索了很多,但找不到答案。android项目的层次结构如屏幕截图所示 Home片段的代码如下所示android studio中fragment_home中VideoView中的空引用,android,Android,我正在构建像tiktok这样的简单应用程序,其中我在fragment_home的VideoView中获得错误空引用。我在谷歌上搜索了很多,但找不到答案。android项目的层次结构如屏幕截图所示 Home片段的代码如下所示 package com.example.musically.ui.home; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.vi
package com.example.musically.ui.home;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.example.musically.R;
public class HomeFragment extends Fragment {
private HomeViewModel homeViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View viewInflate = inflater.inflate(R.layout.fragment_home, container, false);
//VideoView videoview=(VideoView)getView().findViewById(R.id.videoView);
VideoView videoview=(VideoView)getActivity().findViewById(R.id.videoView);
videoview.requestFocus();
String videopath="android.resource://"+getActivity().getPackageName()+"/"+R.raw.video;
Uri uri=Uri.parse(videopath);
videoview.setVideoURI(uri);
videoview.setMediaController(new MediaController(getActivity()));
//Creating MediaControllegetExternalFilesDir(r
//specify the location of media file
return inflater.inflate(R.layout.fragment_home, container, false);
}
}
在VideoView VideoView=VideoViewgetActivity.findViewByIdR.id.VideoView中显示空值
fragment_home的代码是
<?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="fill_parent">
<VideoView android:id="@+id/videoView"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</VideoView>
</RelativeLayout>
错误
你应该更换你的电话线
VideoView videoview=(VideoView)getActivity().findViewById(R.id.videoView);
videoview.requestFocus();
到
并将最后一行从
return inflater.inflate(R.layout.fragment_home, container, false);
到
它应该会起作用
您还应该查找Fragment文档并阅读有关生命周期方法的内容,它将帮助您理解Fragment的基本原理。。。
在活动中,findViewById可通过该关键字访问,但对于片段,例如,它是您膨胀的视图
视图主视图=充气机。充气右布局。所选图层,空;
在这里,您可以查看mainView,现在mainView可以访问所有Id
看看下面的例子
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View mainView = inflater.inflate (R.layout.lout_selected_layer,null);
tvHeader = (TextView) mainView.findViewById(R.id.tv_header);
tvHeader.setText(headerMessage.toString() + "");
lvItems = (ListView) mainView.findViewById(R.id.lv_groups);
lvItems.setAdapter(new AdapterLayer1Items(Layer1Fragment.this.getActivity(), 0,
layer1Objs));
((MainActivity) this.getActivity()).setBannerVisibility(View.VISIBLE);
llGpAdView = (LinearLayout) mainView.findViewById(R.id.gpAdd);
return mainView;
}
当前您的videoView对象为空,因此您将获得空指针异常Return inflater.inflater.layout.fragment\u home,container,false;如果错误,您必须返回maniView,因为您的情况是viewInflate,所以最后一行应该是return viewInflate;不要使用com.my_lib.base.VideoView这只是一个示例包如果您使用android自己的视频视图,那么您以前的代码是可以的,您只需遵循这个答案,包括以前的注释,但是如果您使用第三方lib作为视频视图,那么您必须在xml文件中添加包名,我希望您这次能理解。假设您的视频文件名为ep_01.mp4保存在以下位置,如/res/raw/ep_01,请记住,如果您保存在raw文件夹中,则该文件应不带扩展名。然后**String uriPath=android。resource://com.example.musically/raw/ep_01; Uri=Uri.parseuriPath;video.setVideoURIuri***工作正常,视频中有问题。。。。你能为我们创建像tiktok这样的定制mediaController提供参考吗?我真的不太了解tiktok,但我可以向你保证**FFmpeg**非常棒,、和
VideoView videoview=(VideoView)viewInflate.findViewById(R.id.videoView);
videoview.requestFocus();
return inflater.inflate(R.layout.fragment_home, container, false);
return viewInflate;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View mainView = inflater.inflate (R.layout.lout_selected_layer,null);
tvHeader = (TextView) mainView.findViewById(R.id.tv_header);
tvHeader.setText(headerMessage.toString() + "");
lvItems = (ListView) mainView.findViewById(R.id.lv_groups);
lvItems.setAdapter(new AdapterLayer1Items(Layer1Fragment.this.getActivity(), 0,
layer1Objs));
((MainActivity) this.getActivity()).setBannerVisibility(View.VISIBLE);
llGpAdView = (LinearLayout) mainView.findViewById(R.id.gpAdd);
return mainView;
}