如何使用两个片段实现视频和视频列表

时间:2012-08-30 12:41:22

标签: android android-fragments expandablelistview android-videoview

我正在为HonyComb创建一个应用程序,我必须在其中显示视频和视频列表。 为此,我创建了两个片段,一个用于显示视频,另一个用于videoList。当用户点击视频列表时,该视频应该开始在其他片段的videoview中播放。

我创建了自定义expandablelist来显示videoList(我的视频被分类为组)。我必须显示已使用imageview和两个textview创建布局的视频图像,标题和说明。我可以显示视频列表。现在我被困在两点:

  1. 点击视频列表后,我无法播放视频。未调用onChildCLick(),但可以调用onTouch()onGroupClick()
  2. 当用户点击VideoView时,我想全屏播放视频。我不知道如何实现它。
  3. 请帮帮我..

    1. fragment_layout.xml

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="horizontal" > 
      <fragment
          android:id="@+id/detailFragment"
          android:layout_width="0dip"
          android:layout_height="match_parent"
          android:layout_weight="1"
          class="com.abs.qpr.VideoFragment" >
      </fragment>
      
      <fragment
          android:id="@+id/listFragment"
          android:layout_width="0dip"
          android:layout_height="match_parent"
          android:layout_weight="0.6"
          class="com.abs.qpr.VideoListFragment" > 
      </fragment> 
      </LinearLayout>
      
    2. MyActivity .java

       import android.os.Bundle;
      
       public class MyActivity extends android.support.v4.app.FragmentActivity{
      
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.fragment_layout);
      }
      
      }
      
    3. VideoFragment.java

      import android.net.Uri;
      import android.os.Bundle;
      import android.support.v4.app.Fragment;
      
      public class VideoFragment extends Fragment{
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
      Log.d("VideoFragment", "On Create View");
      
      View view = inflater.inflate(R.layout.activity_my_video, container,  false);
      return view;
      
       }
      
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
      super.onActivityCreated(savedInstanceState);
        } 
      
      public void playVideo() {
      
      VideoView myVideoView2=  (VideoView)getView().findViewById(R.id.my_tecnique_video);
      String temp="android.resource://" + getActivity().getApplicationContext().getPackageName() + "/" 
      + R.raw.back_circles;
      
      System.out.println(temp + ": " + getActivity().getApplicationContext());
       Uri video = Uri.parse("android.resource://" + getActivity().getApplicationContext().getPackageName() + "/" 
                  + R.raw.back_circles);
      
          myVideoView2.setVideoURI(video);
          myVideoView2.setMediaController(new MediaController(getActivity()));
          myVideoView2.requestFocus();
          myVideoView2.start();
       } 
      }
      
    4. VideoListFragment.java

      public class VideoListFragment extends Fragment {
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {
      Log.e("VideoFragment", "On Create View");
      View view = inflater.inflate(
              R.layout.activity_my_techniques_video_list, container, false);
      return view;
      }
      
      @Override
      public void onActivityCreated(Bundle savedInstanceState) {
      super.onActivityCreated(savedInstanceState);
      Log.e("VideoListFragment", "On Activity Created ");
      
      ExpandableListView expList = (ExpandableListView) getView()
              .findViewById(R.id.my_tech_video_listview);
      
      expList.setAdapter(new VideoExpandableListAdapter(getActivity()));
      
      expList.setOnChildClickListener(new OnChildClickListener() {
      
       @Override
       public boolean onChildClick(ExpandableListView expandablelistview,
                  View view, int i, int j, long l) {
      
              // TODO Auto-generated method stub
              Log.d("Checking.....", "onGroupClick()");
      
              VideoFragment fragment = (VideoFragment) getFragmentManager()
                      .findFragmentById(R.id.detailFragment);
              if (fragment != null && fragment.isInLayout()) {
                  fragment.playVideo();
              } else {
      
                  Intent videointent = new Intent(getActivity()
                          .getApplicationContext(), VideoActivity.class);
      
                  startActivity(videointent);
      
              }
      
              return false;
          }
      });
      }
      
    5. VideoExpandableListAdapter.java

      public class VideoExpandableListAdapter extends BaseExpandableListAdapter{
      
      private Context myContext;
      ArrayList<VideoListVO> videoListVO;
      
      public VideoExpandableListAdapter(Context context) {
      myContext = context;        
      }
      
      @Override
      public Object getChild(int groupPosition, int childPosition) {
      // TODO Auto-generated method stub
      return null;
      }
      
      @Override
      public long getChildId(int groupPosition, int childPosition) {
      // TODO Auto-generated method stub
      return 0;
      }
      
      @Override
      public View getChildView(int groupPosition, int childPosition,
          boolean isLastChild, View convertView, ViewGroup parent) {
      
      if (convertView == null) {
          LayoutInflater inflater = (LayoutInflater) myContext
                  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          convertView = inflater.inflate(R.layout.childrow, null);
      
      }
      
      VideoListVO vlvo= videoListVO.get(groupPosition);
      VideoDetailsVO vdvo=vlvo.getVideoDetailList().get(childPosition);
      
      InputStream is = null;
      try {
          String imageName=vdvo.getImageName();
          imageName="images/"+imageName+".png";
        is = myContext.getResources().getAssets().open(imageName);
      } catch (IOException e) {
        Log.w("EL", e);
      }
      
      Bitmap image = BitmapFactory.decodeStream(is);
      
      ImageView ib2 = (ImageView) convertView.findViewById( R.id.video_image);
      ib2.setImageBitmap(image);
      
      TextView titleText=(TextView)convertView.findViewById(R.id.video_title_text);
      titleText.setText(vdvo.getVideoTitle());
      
      TextView descriptionText=(TextView)convertView.findViewById(R.id.video_description);
      descriptionText.setText(vdvo.getVideoDescription());
      
      return convertView;
      }
      
      @Override
      public int getChildrenCount(int groupPosition) {
      // TODO Auto-generated method stub
      return videoListVO.get(groupPosition).getVideoDetailList().size();
      }
      
      @Override
      public Object getGroup(int groupPosition) {
      // TODO Auto-generated method stub
      return null;
      }
      
      @Override
      public int getGroupCount() {
      // TODO Auto-generated method stub
      return videoListVO.size();
      }
      
      @Override
      public long getGroupId(int groupPosition) {
      // TODO Auto-generated method stub
      return 0;
      }
      
      @Override
      public View getGroupView(int groupPosition, boolean isExpanded,
          View convertView, ViewGroup parent) {
      
      if (convertView == null) {
          LayoutInflater inflater =  (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          convertView = inflater.inflate(R.layout.group_row, null);
         }
      TextView tvGroupName = (TextView) convertView.findViewById(R.id.tvgrpname);
      tvGroupName.setText(videoListVO.get(groupPosition).getVideoType());
      
      return convertView;
      }
      
      @Override
      public boolean hasStableIds() {
      // TODO Auto-generated method stub
      return false;
      }
      
      @Override
      public boolean isChildSelectable(int groupPosition, int childPosition) {
      // TODO Auto-generated method stub
      return true;
      }
      
      }
      

1 个答案:

答案 0 :(得分:2)

请从ListFragment(正确方式)扩展VideoListFragment,您可以在其中直接设置适配器,可以收听listitemclick事件等,这将有助于解决您的问题。

为此,您可以浏览this教程。

然后解决你的第二个问题(点击时的全屏视图):

当用户触摸视频部分两次(点击)时(你可以在ontouchlistener和计时器的帮助下检查是否发生了连续触摸),拨打另一个活动,在视图部分,全屏设计视图。因此,当用户点击回来时,它将返回到片段活动。