2012-08-30 28 views
1

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

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

  1. 当我点击视频列表时,我无法播放视频。 onChildCLick()没有被调用,但onTouch()onGroupClick()能够被调用。
  2. 我想在用户点击VideoView时全屏播放视频。我不知道如何实现。

请帮助我..

  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; 
    } 
    
    } 
    
+0

您能否共享一段代码,我们可以帮助您 –

+0

@EldhoseMBabu我已经添加了代码.. – Nishant

回答

2

请从ListFragment(有道),在那里你可以直接setadapter,可以听listitemclick延长VideoListFragment事件等,这将有助于解决您的问题。

为此,您可以通过this教程。

然后解决您的第二个问题(攻丝时全屏视图):

当用户触摸视频部分的两倍(抽头)(你可以用ontouchlistener的帮助和一个计时器得到这个检查是否连续触摸发生),打电话给视图部分中的另一个活动,设计全屏视图。所以当用户点击后,它会回到片段活动。

+0

感谢您的快速响应......我在我的videoList中使用'ExpandableListView'我无法扩展'ListFragment'并且不支持扩展'ExpandableListFragment'.I将尝试你的videoview逻辑。 – Nishant

+0

你可以在我的代码中看到为什么'onChildClickListener()'没有被调用 – Nishant

+0

我发现你的代码有任何问题..你可以尝试setOnItemClickListener而不是? –