package com.todayinfo.ui.fragment;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;
import com.todayinfo.event.EventCloseFM;
import com.todayinfo.event.EventOpenFM;
import com.todayinfo.model.Info;
import com.todayinfo.ui.api.DataTask;
import com.todayinfo.ui.api.IBackEventStrategy;
import com.todayinfo.ui.api.PwdErrorListener;
import com.todayinfo.ui.api.RetryNetwork;
import com.todayinfo.ui.api.Task;
import com.todayinfo.utils.LogUtil;
import com.todayinfo.utils.ThreadPoolManager;
import de.greenrobot.event.EventBus;
/**
* 所有的fragment都继承于它
*
* @author zhou.ni 2015年2月1日
*/
public abstract class SuperFragment extends Fragment implements RetryNetwork, PwdErrorListener, OnTouchListener, IBackEventStrategy {
private static final String TAG = "SuperFragment";
ThreadPoolManager mThreadPoolManager;
protected Context mContext;
protected Activity mActivity;
protected ProgressDialog progress;
protected Info mInfo;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mContext = getActivity();
mActivity = getActivity();
mThreadPoolManager = ThreadPoolManager.getInstance();
progress = getProgressDialog("正在加载,请稍后...");
progress.setCancelable(true);
obtainInfo();
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (!hidden) {
obtainInfo();
} else {
}
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
view.setOnTouchListener(this);
super.onViewCreated(view, savedInstanceState);
}
public ProgressDialog getProgressDialog(String msg) {
ProgressDialog progressDialog = new ProgressDialog(mContext);
progressDialog.setMessage(msg);
progressDialog.setCancelable(true);
return progressDialog;
}
/**
* 弹出吐司
* @param msg
*/
protected void showToast(final String msg) {
runOnUI(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
}
});
}
/**
* 当前最后执行的线程任务,task的ID属性可以用于判断线程启动的先后
*/
protected Task lastTask = new Task(0) {
@Override
public void run() {
}
};
protected DataTask dataTask = new DataTask(0) {
};
/**
* UI线程执行一个任务
*
* @param run
*/
protected void runOnUI(Runnable run) {
if (mActivity != null) {
mActivity.runOnUiThread(run);
}
}
/**
* 子线程执行一个任务
*
* @param run
*/
protected void executeTask(Task task) {
this.lastTask = task;
mThreadPoolManager.executeTask(task);
}
/**
*
* @param run
*/
protected void executeTask(Runnable run) {
mThreadPoolManager.executeTask(run);
}
/**
* 隐藏输入法
* @param context
* @param achor
*/
public static void hideSoftInput( Context context, View achor ){
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(achor.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
public void receiveInfo(Info info) {
this.mInfo = info;
}
@Override
public void onDestroy() {
if (progress != null) {
progress.dismiss();
}
super.onDestroy();
}
/**
* 是否有数据传递过来
*
* @return
*/
protected boolean hasInfo() {
if (mInfo != null) {
return true;
}
return false;
}
/**
* 打开一个Fragment
*
* @param clazz
* @param info
*/
protected void openFragment(final Class clazz, final Info info) {
runOnUI(new Runnable() {
@Override
public void run() {
EventOpenFM event = new EventOpenFM();
event.setClazz(clazz);
event.setInfo(info);
EventBus.getDefault().post(event);
}
});
}
/**
* 关闭一个Fragment
*
* @param clazz
* @param info
*/
protected void closeFragment(final Class clazz, final Info info) {
runOnUI(new Runnable() {
@Override
public void run() {
EventCloseFM event = new EventCloseFM();
event.setClazz(clazz);
event.setInfo(info);
EventBus.getDefault().post(event);
mInfo = null;
}
});
}
/**
* 隐藏进度条
*/
void dismissProgressDialog() {
runOnUI(new Runnable() {
@Override
public void run() {
if (progress != null) {
progress.dismiss();
}
}
});
}
/**
* 显示进度条
*/
void showProgressDialog() {
runOnUI(new Runnable() {
@Override
public void run() {
if (progress == null) {
progress = new ProgressDialog(mContext);
progress.setMessage("正在加载,请稍后...");
progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
}
progress.setCancelable(true);
try {
progress.show();
} catch (Exception e) {
LogUtil.e(TAG, "progress show exception");
}
}
});
}
/**
* 获取数据bean的逻辑统一放在这里
*/
protected void obtainInfo() {
}
@Override
public boolean backOperate() {
mInfo = null;
return false;
}
/**
* 防止View的事件穿透
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
}