简单说一下fragment,以及一些误区
来源:互联网 发布:淘宝售假三次 编辑:程序博客网 时间:2024/03/29 02:39
原来使用fragment的时候其Activity继承的是FragmentActivity,所以当时就没有发现漏洞,可是现在却不然,突然发现自己又掉坑里了,因为效果不是我要的,但是程序并没有问题,只是程序适用的场景不同,好,现在来说一下,我在那翻船了,建议还是了解fragment http://blog.csdn.net/qq_23195583/article/details/45195127(这个适用情况比较多),下面说一下
说一下继承FragmentActivity的
package com.example.fanyafeng.laugh.activity;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.app.FragmentTransaction;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.DisplayMetrics;import android.view.View;import android.view.View.OnClickListener;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import android.widget.ImageView;import android.widget.TextView;import com.example.fanyafeng.laugh.R;import com.example.fanyafeng.laugh.fragment.EvaluateFragment;import com.example.fanyafeng.laugh.fragment.RecommendFragment;import java.util.ArrayList;import java.util.List;public class TestActivity extends FragmentActivity { private ViewPager test_viewpager; private List<Fragment> fragmentList; private int selectedColor, unSelectedColor; private Drawable selectedButton, unSelectedButton; private View RecommendView, EvaluateView; private TextView test_recommend, test_evaluate; private ImageView test_recommend_img, test_evaluate_img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); initView(); initData(); } private void initView() { unSelectedColor = getResources().getColor(R.color.black); selectedColor = getResources().getColor(R.color.red); selectedButton = getResources().getDrawable(R.drawable.video_playing_normal); unSelectedButton = getResources().getDrawable(R.drawable.video_playing_pressed); test_recommend_img = (ImageView) findViewById(R.id.test_recommend_img); test_evaluate_img = (ImageView) findViewById(R.id.test_evaluate_img); test_recommend = (TextView) findViewById(R.id.test_recommend); test_evaluate = (TextView) findViewById(R.id.test_evaluate); test_recommend.setOnClickListener(new MyOnClickListener(0)); test_evaluate.setOnClickListener(new MyOnClickListener(1)); initTextView(); initViewPager(); } private void initTextView() { test_recommend.setTextColor(selectedColor); test_recommend_img.setBackground(selectedButton); test_evaluate.setTextColor(unSelectedColor); test_evaluate_img.setBackground(unSelectedButton); } private void initData() { } private void initViewPager() { test_viewpager = (ViewPager) findViewById(R.id.test_viewpager); fragmentList = new ArrayList<Fragment>(); fragmentList.add(new RecommendFragment()); fragmentList.add(new EvaluateFragment()); test_viewpager.setAdapter(new OurPagerAdapter(getSupportFragmentManager(), fragmentList)); test_viewpager.setCurrentItem(0); test_viewpager.setOnPageChangeListener(new MyOnPageChangeListener()); } /** * 定义适配器 */ class OurPagerAdapter extends FragmentPagerAdapter { private List<Fragment> fragmentList; private FragmentManager fragmentManager; public OurPagerAdapter(FragmentManager fm, List<Fragment> fragmentList) { super(fm); this.fragmentList = fragmentList; } /** * 得到每个页面 */ @Override public Fragment getItem(int arg0) { return (fragmentList == null || fragmentList.size() == 0) ? null : fragmentList.get(arg0); } public void setFragments(ArrayList<Fragment> fragments) { if (this.fragmentList != null) { FragmentTransaction ft = fragmentManager.beginTransaction(); for (Fragment f : this.fragmentList) { ft.remove(f); } ft.commit(); ft = null; fragmentManager.executePendingTransactions(); } this.fragmentList = fragments; notifyDataSetChanged(); } /** * 每个页面的title */ @Override public CharSequence getPageTitle(int position) { return null; } /** * 页面的总个数 */ @Override public int getCount() { return fragmentList == null ? 0 : fragmentList.size(); } } public class MyOnPageChangeListener implements ViewPager.OnPageChangeListener { public void onPageScrollStateChanged(int index) { } public void onPageScrolled(int arg0, float arg1, int arg2) { } public void onPageSelected(int index) { switch (index) { case 0: test_recommend.setTextColor(selectedColor); test_recommend_img.setBackground(selectedButton); test_evaluate.setTextColor(unSelectedColor); test_evaluate_img.setBackground(unSelectedButton); break; case 1: test_recommend.setTextColor(unSelectedColor); test_recommend_img.setBackground(unSelectedButton); test_evaluate.setTextColor(selectedColor); test_evaluate_img.setBackground(selectedButton); break; } } } private class MyOnClickListener implements View.OnClickListener { private int index = 0; public MyOnClickListener(int i) { index = i; } public void onClick(View v) { test_viewpager.setCurrentItem(index); } }}这个相当于管理fragment,这样的话在其new的话可以在加载的时候进行相应的生命周期的操作
来看被管理的fragment
package com.example.fanyafeng.laugh.fragment;import android.app.Activity;import android.net.Uri;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ListView;import com.example.fanyafeng.laugh.R;import com.example.fanyafeng.laugh.adapter.VideoListAdapter;import com.example.fanyafeng.laugh.bean.VideoListBean;import com.example.fanyafeng.laugh.util.L;import com.example.fanyafeng.laugh.util.PostUtil;import java.io.IOException;import java.util.ArrayList;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;/** * A simple {@link Fragment} subclass. * Activities that contain this fragment must implement the * {@link RecommendFragment.OnFragmentInteractionListener} interface * to handle interaction events. * Use the {@link RecommendFragment#newInstance} factory method to * create an instance of this fragment. */public class RecommendFragment extends BaseFragment { // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; private static final String ARG_PARAM2 = "param2"; // TODO: Rename and change types of parameters private String mParam1; private String mParam2; private ListView recommend_listview; private VideoListAdapter videoListAdapter; private List<VideoListBean> videoListBeanList = new ArrayList<VideoListBean>(); private List<Map<String, Object>> videoInfoList = new ArrayList<Map<String, Object>>();// private OnFragmentInteractionListener mListener; /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment RecommendFragment. */ // TODO: Rename and change types and number of parameters public static RecommendFragment newInstance(String param1, String param2) { RecommendFragment fragment = new RecommendFragment(); Bundle args = new Bundle(); args.putString(ARG_PARAM1, param1); args.putString(ARG_PARAM2, param2); fragment.setArguments(args); return fragment; } public RecommendFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_recommend, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initView(); Thread loadThread = new Thread(new LoadThread()); loadThread.start(); initData(); } private void initView(){ recommend_listview=(ListView)getActivity().findViewById(R.id.recommend_listview); } private void initData(){ } class LoadThread implements Runnable { @Override public void run() { loadData(); } } private void loadData(){ Map<String,String> map=new LinkedHashMap<String,String>(); map.put("devicetype","android"); try { String backMsg = PostUtil.postData(BaseUrl+GetRecommendVideo, map); L.d("推荐列表具体内容",backMsg); } catch (IOException e) { e.printStackTrace(); } }// // TODO: Rename method, update argument and hook method into UI event// public void onButtonPressed(Uri uri) {// if (mListener != null) {// mListener.onFragmentInteraction(uri);// }// }// @Override// public void onAttach(Activity activity) {// super.onAttach(activity);// try {// mListener = (OnFragmentInteractionListener) activity;// } catch (ClassCastException e) {// throw new ClassCastException(activity.toString()// + " must implement OnFragmentInteractionListener");// }// }// @Override// public void onDetach() {// super.onDetach();// mListener = null;// } /** * This interface must be implemented by activities that contain this * fragment to allow an interaction in this fragment to be communicated * to the activity and potentially other fragments contained in that * activity. * <p/> * See the Android Training lesson <a href= * "http://developer.android.com/training/basics/fragments/communicating.html" * >Communicating with Other Fragments</a> for more information. */// public interface OnFragmentInteractionListener {// // TODO: Update argument type and name// public void onFragmentInteraction(Uri uri);// }}这样的话,每当加载相应的fragment就可以按照相应的生命周期走,而不是仅仅加载相应的xml上面的布局,再来看继承Activity的
下面的Activity里面有其他的代码,大家稍微过滤小,我就不在这里ctrl+d了
package com.example.fanyafeng.laugh.activity;import android.content.Context;import android.content.Intent;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.os.Handler;import android.os.HandlerThread;import android.os.Looper;import android.os.Message;import android.os.PowerManager;import android.os.PowerManager.WakeLock;import android.os.Process;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.app.FragmentTransaction;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.util.Log;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;import android.widget.TextView;import com.baidu.cyberplayer.core.BVideoView;import com.baidu.cyberplayer.core.BVideoView.OnCompletionListener;import com.baidu.cyberplayer.core.BVideoView.OnErrorListener;import com.baidu.cyberplayer.core.BVideoView.OnInfoListener;import com.baidu.cyberplayer.core.BVideoView.OnPlayingBufferCacheListener;import com.baidu.cyberplayer.core.BVideoView.OnPreparedListener;import com.example.fanyafeng.laugh.R;import com.example.fanyafeng.laugh.fragment.EvaluateFragment;import com.example.fanyafeng.laugh.fragment.RecommendFragment;import com.example.fanyafeng.laugh.util.L;import com.example.fanyafeng.laugh.util.PostUtil;import com.example.fanyafeng.laugh.util.T;import org.json.JSONException;import org.json.JSONObject;import java.io.IOException;import java.util.ArrayList;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;public class VideoViewPlayingActivity extends BaseNoActionbarActivity implements OnPreparedListener, OnCompletionListener, OnErrorListener, OnInfoListener, OnPlayingBufferCacheListener { private final String TAG = "VideoViewPlayingActivity"; private String mVideoSource = null; private ImageButton mPlaybtn = null; private ImageButton mPrebtn = null; private ImageButton mForwardbtn = null; private LinearLayout mController = null; private SeekBar mProgress = null; private TextView mDuration = null; private TextView mCurrPostion = null; private String url_info; /** * 记录播放位置 */ private int mLastPos = 0; /** * 播放状态 */ private enum PLAYER_STATUS { PLAYER_IDLE, PLAYER_PREPARING, PLAYER_PREPARED, } private PLAYER_STATUS mPlayerStatus = PLAYER_STATUS.PLAYER_IDLE; private BVideoView mVV = null; private EventHandler mEventHandler; private HandlerThread mHandlerThread; private final Object SYNC_Playing = new Object(); private WakeLock mWakeLock = null; private static final String POWER_LOCK = "VideoViewPlayingActivity"; private boolean mIsHwDecode = false; private final int EVENT_PLAY = 0; private final int UI_EVENT_UPDATE_CURRPOSITION = 1; private ViewPager video_playing_viewpager; private List<View> viewList; private FragmentManager fragmentManager; private TextView video_recommend, video_evaluate; private int selectedColor, unSelectedColor; private View RecommendView, EvaluateView; private Drawable selectedButton, unSelectedButton; private ImageView video_recommend_img, video_evaluate_img; class EventHandler extends Handler { public EventHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { switch (msg.what) { case EVENT_PLAY: /** * 如果已经播放了,等待上一次播放结束 */ if (mPlayerStatus != PLAYER_STATUS.PLAYER_IDLE) { synchronized (SYNC_Playing) { try { SYNC_Playing.wait(); Log.v(TAG, "wait player status to idle"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 设置播放url */ mVV.setVideoPath(mVideoSource); /** * 续播,如果需要如此 */ if (mLastPos > 0) { mVV.seekTo(mLastPos); mLastPos = 0; } /** * 显示或者隐藏缓冲提示 */ mVV.showCacheInfo(true); /** * 开始播放 */ mVV.start(); mPlayerStatus = PLAYER_STATUS.PLAYER_PREPARING; break; default: break; } } } Handler mUIHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { /** * 更新进度及时间 */ case UI_EVENT_UPDATE_CURRPOSITION: int currPosition = mVV.getCurrentPosition(); int duration = mVV.getDuration(); updateTextViewWithTimeFormat(mCurrPostion, currPosition); updateTextViewWithTimeFormat(mDuration, duration); mProgress.setMax(duration); mProgress.setProgress(currPosition); mUIHandler.sendEmptyMessageDelayed(UI_EVENT_UPDATE_CURRPOSITION, 200); break; default: break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video_view_playing); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, POWER_LOCK); Intent intent = this.getIntent(); url_info = intent.getStringExtra("url_info"); L.d(url_info); mIsHwDecode = getIntent().getBooleanExtra("isHW", false); Thread loadThread = new Thread(new LoadMore()); loadThread.start(); initTextView(); initUI(); initViewPager(); /** * 开启后台事件处理线程 */ mHandlerThread = new HandlerThread("event handler thread", Process.THREAD_PRIORITY_BACKGROUND); mHandlerThread.start();// mEventHandler = new EventHandler(mHandlerThread.getLooper()); } private void initTextView() { unSelectedColor = getResources().getColor(R.color.black); selectedColor = getResources().getColor(R.color.black); selectedButton = getResources().getDrawable(R.drawable.video_playing_normal); unSelectedButton = getResources().getDrawable(R.drawable.video_playing_pressed); video_recommend = (TextView) findViewById(R.id.video_recommend); video_evaluate = (TextView) findViewById(R.id.video_evaluate); video_recommend_img = (ImageView) findViewById(R.id.video_recommend_img); video_evaluate_img = (ImageView) findViewById(R.id.video_evaluate_img); video_recommend.setTextColor(selectedColor);// video_recommend_img.setBackground(selectedButton); video_evaluate.setTextColor(unSelectedColor);// video_evaluate_img.setBackground(unSelectedButton); video_recommend.setOnClickListener(new MyOnClickListener(0)); video_evaluate.setOnClickListener(new MyOnClickListener(1)); } private class MyOnClickListener implements View.OnClickListener { private int index = 0; public MyOnClickListener(int i) { index = i; } public void onClick(View v) { video_playing_viewpager.setCurrentItem(index); } } private void initViewPager() { video_playing_viewpager = (ViewPager) findViewById(R.id.video_playing_viewpager); viewList = new ArrayList<View>(); LayoutInflater inflater = getLayoutInflater(); RecommendView = inflater.inflate(R.layout.fragment_recommend, null); EvaluateView = inflater.inflate(R.layout.fragment_evaluate, null); viewList.add(RecommendView); viewList.add(EvaluateView); video_playing_viewpager.setAdapter(new MyViewPagerAdapter(viewList)); video_playing_viewpager.setCurrentItem(0); video_playing_viewpager.setOnPageChangeListener(new VideoListOnPageChangeListener()); } public class VideoListOnPageChangeListener implements ViewPager.OnPageChangeListener { public void onPageScrollStateChanged(int index) { } public void onPageScrolled(int arg0, float arg1, int arg2) { } public void onPageSelected(int index) { switch (index) { case 0: video_recommend.setTextColor(selectedColor);// video_recommend_img.setBackground(selectedButton); video_evaluate.setTextColor(unSelectedColor);// video_evaluate_img.setBackground(unSelectedButton); break; case 1: video_recommend.setTextColor(unSelectedColor);// video_recommend_img.setBackground(unSelectedButton); video_evaluate.setTextColor(selectedColor);// video_evaluate_img.setBackground(selectedButton); break; } } } public class MyViewPagerAdapter extends PagerAdapter { private List<View> mListViews; public MyViewPagerAdapter(List<View> mListViews) { this.mListViews = mListViews; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(mListViews.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(mListViews.get(position), 0); return mListViews.get(position); } @Override public int getCount() { return mListViews.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); } class LoadMore implements Runnable { @Override public void run() { getRealUrl(url_info); } } private void getRealUrl(String url_info) { Map<String, String> map = new LinkedHashMap<>(); map.put("url", url_info); try { String backMsg = PostUtil.postData(BaseUrl + GetRealUrl, map); try { JSONObject jsonObject = new JSONObject(backMsg); Message message = Message.obtain(); if (jsonObject.getInt("result") == 1) { JSONObject data = jsonObject.getJSONObject("data"); Bundle bundle = new Bundle(); bundle.putString("m3u8", data.getString("m3u8")); message.setData(bundle); message.what = 1; uiHandler.sendMessage(message); } else { message.what = 0; uiHandler.sendMessage(message); } } catch (JSONException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } Handler uiHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bundle bundle = msg.getData(); switch (msg.what) { case 0: T.showLong(VideoViewPlayingActivity.this, "视频解析失败"); break; case 1: mVideoSource = bundle.getString("m3u8"); mEventHandler = new EventHandler(mHandlerThread.getLooper()); mEventHandler.sendEmptyMessage(EVENT_PLAY); break; } } }; /** * 初始化界面 */ private void initUI() { mPlaybtn = (ImageButton) findViewById(R.id.play_btn); mPrebtn = (ImageButton) findViewById(R.id.pre_btn); mForwardbtn = (ImageButton) findViewById(R.id.next_btn); mController = (LinearLayout) findViewById(R.id.controlbar); mProgress = (SeekBar) findViewById(R.id.media_progress); mDuration = (TextView) findViewById(R.id.time_total); mCurrPostion = (TextView) findViewById(R.id.time_current); registerCallbackForControl(); /** * 设置ak及sk的前16位 */ BVideoView.setAKSK("kBSfVrlokXqK0cFDYoaRSXle", "MTzMwgYd4CLI5dtIFBY4RZmSW77RnKyD"); /** *获取BVideoView对象 */ mVV = (BVideoView) findViewById(R.id.video_view); /** * 注册listener */ mVV.setOnPreparedListener(this); mVV.setOnCompletionListener(this); mVV.setOnErrorListener(this); mVV.setOnInfoListener(this); /** * 设置解码模式 */ mVV.setDecodeMode(mIsHwDecode ? BVideoView.DECODE_HW : BVideoView.DECODE_SW); } /** * 为控件注册回调处理函数 */ private void registerCallbackForControl() { mPlaybtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub if (mVV.isPlaying()) { mPlaybtn.setImageResource(R.drawable.play_btn_style); /** * 暂停播放 */ mVV.pause(); } else { mPlaybtn.setImageResource(R.drawable.pause_btn_style); /** * 继续播放 */ mVV.resume(); } } }); /** * 实现切换示例 */ mPrebtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { /** * 如果已经播放了,等待上一次播放结束 */ if (mPlayerStatus != PLAYER_STATUS.PLAYER_IDLE) { mVV.stopPlayback(); } /** * 发起一次新的播放任务 */ if (mEventHandler.hasMessages(EVENT_PLAY)) mEventHandler.removeMessages(EVENT_PLAY); mEventHandler.sendEmptyMessage(EVENT_PLAY); } }); mForwardbtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub } }); OnSeekBarChangeListener osbc1 = new OnSeekBarChangeListener() { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub //Log.v(TAG, "progress: " + progress); updateTextViewWithTimeFormat(mCurrPostion, progress); } public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub /** * SeekBar开始seek时停止更新 */ mUIHandler.removeMessages(UI_EVENT_UPDATE_CURRPOSITION); } public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub int iseekPos = seekBar.getProgress(); /** * SeekBark完成seek时执行seekTo操作并更新界面 * */ mVV.seekTo(iseekPos); Log.v(TAG, "seek to " + iseekPos); mUIHandler.sendEmptyMessage(UI_EVENT_UPDATE_CURRPOSITION); } }; mProgress.setOnSeekBarChangeListener(osbc1); } private void updateTextViewWithTimeFormat(TextView view, int second) { int hh = second / 3600; int mm = second % 3600 / 60; int ss = second % 60; String strTemp = null; if (0 != hh) { strTemp = String.format("%02d:%02d:%02d", hh, mm, ss); } else { strTemp = String.format("%02d:%02d", mm, ss); } view.setText(strTemp); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); /** * 在停止播放前 你可以先记录当前播放的位置,以便以后可以续播 */ if (mPlayerStatus == PLAYER_STATUS.PLAYER_PREPARED) { mLastPos = mVV.getCurrentPosition(); mVV.stopPlayback(); } } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); Log.v(TAG, "onResume"); if (null != mWakeLock && (!mWakeLock.isHeld())) { mWakeLock.acquire(); } /** * 发起一次播放任务,当然您不一定要在这发起 */// mEventHandler.sendEmptyMessage(EVENT_PLAY); } private long mTouchTime; private boolean barShow = true; @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub if (event.getAction() == MotionEvent.ACTION_DOWN) mTouchTime = System.currentTimeMillis(); else if (event.getAction() == MotionEvent.ACTION_UP) { long time = System.currentTimeMillis() - mTouchTime; if (time < 400) { updateControlBar(!barShow); } } return true; } public void updateControlBar(boolean show) { if (show) { mController.setVisibility(View.VISIBLE); } else { mController.setVisibility(View.INVISIBLE); } barShow = show; } @Override protected void onStop() { super.onStop(); } @Override protected void onDestroy() { super.onDestroy(); /** * 退出后台事件处理线程 */ mHandlerThread.quit(); } @Override public boolean onInfo(int what, int extra) { // TODO Auto-generated method stub switch (what) { /** * 开始缓冲 */ case BVideoView.MEDIA_INFO_BUFFERING_START: break; /** * 结束缓冲 */ case BVideoView.MEDIA_INFO_BUFFERING_END: break; default: break; } return true; } /** * 当前缓冲的百分比, 可以配合onInfo中的开始缓冲和结束缓冲来显示百分比到界面 */ @Override public void onPlayingBufferCache(int percent) { // TODO Auto-generated method stub } /** * 播放出错 */ @Override public boolean onError(int what, int extra) { // TODO Auto-generated method stub Log.v(TAG, "onError"); synchronized (SYNC_Playing) { SYNC_Playing.notify(); } mPlayerStatus = PLAYER_STATUS.PLAYER_IDLE; mUIHandler.removeMessages(UI_EVENT_UPDATE_CURRPOSITION); return true; } /** * 播放完成 */ @Override public void onCompletion() { // TODO Auto-generated method stub Log.v(TAG, "onCompletion"); synchronized (SYNC_Playing) { SYNC_Playing.notify(); } mPlayerStatus = PLAYER_STATUS.PLAYER_IDLE; mUIHandler.removeMessages(UI_EVENT_UPDATE_CURRPOSITION); } /** * 准备播放就绪 */ @Override public void onPrepared() { // TODO Auto-generated method stub Log.v(TAG, "onPrepared"); mPlayerStatus = PLAYER_STATUS.PLAYER_PREPARED; mUIHandler.sendEmptyMessage(UI_EVENT_UPDATE_CURRPOSITION); }}如果继承的是Activity的话,只会加载相应的布局,fragment不会进行相应的操作
具体的大家可以自己图写个demo体会一下
0 0
- 简单说一下fragment,以及一些误区
- 简单说一下RecyclerView
- 简单说一下线程池
- 简单说一下编译ijkplayer
- 简单说一下谷歌的Message以及常用的方法
- 题外话----简单说一下学习方法
- MFC 消息截取简单说一下
- xml(简单的说一下xml)
- 今天简单说一下cdc 的使用
- [例子向]简单说一下设计模式
- 简单说一下Nginx配置说明
- 说一下fragment中常用的几个周期性方法
- 简单说一些intent传值
- 简单说一下CSS的position常用的三个属性:relative,absolute以及fixed,以及嵌套使用的一个常见情况
- 继续说一下openjson 以及 json path 的使用 (2)
- 简单介绍一下开博客的原因以及简单的自我介绍以及简单的目标和一些简单的开坑
- 第一篇博客 简单调研了一下百度语音 以及简单实现一些根据语音获取网络连接
- 简单说一下测试人员在开发中的作用
- Android Studio Mac 10.5+快捷键使用
- xmpp的讲解
- Algorithms—101.Symmetric Tree
- eclipse导入别人的项目时报错“The import javax.servlet cannot be resolved”
- [小技巧] git 是谁弄乱了我的代码?
- 简单说一下fragment,以及一些误区
- C++设计模式-Factory工厂模式
- Gibson
- android逆向分析之smali练习
- 对象间的联动--观察者模式
- Android的缓存机制——图片的缓存
- windbg相关(阿里巴巴电话面试总结)
- android通过apktool之反编译 重新打包
- 【sqlserver】【安装】出现需要重启的选项,重启后依然有的解决办法