package com.anthony.library.base;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.anthony.library.R;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import rx.subscriptions.CompositeSubscription;
/**
* Created by Anthony on 2016/2/25.
* Class Note:
* <p/>
* Base Fragment for all the Fragment defined in the project
* 1 extended from {@link AbsBaseFragment} to do
* some base operation.
* 2 do operation in {@link #initViews(View, Bundle)}
*/
public abstract class AbsBaseFragment extends Fragment {
/**
* Log tag
*/
protected static String TAG_LOG = null;
/**
* url and title passed into fragment
*/
public static String EXTRA_URL = "url";
private String mUrl;
public static String EXTRA_TITLE = "url";
private String mTitle;
/**
* activity context of fragment
*/
protected Context mContext;
protected Activity mActivity;
// protected Subscription mSubscription;
protected CompositeSubscription mSubscriptions;
private Unbinder mUnBinder;
// @Inject
// ToastUtils mToastUtils;
// @Inject
// DataManager mDataManager;
@Override
public void onAttach(Context context) {
//set a context from current activity
mActivity = (Activity) context;
mContext = context;
super.onAttach(context);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//set Timber as log util
TAG_LOG = this.getClass().getSimpleName();
// Timber.tag(TAG_LOG);
//url and title
if (getArguments() != null) {
mUrl = getArguments().getString(EXTRA_URL);
mTitle = getArguments().getString(EXTRA_TITLE);
}
//initialize Dagger2 to support DI
// initDagger2(((AbsBaseActivity) getActivity()).activityComponent());
//rxjava subscriptions,use it like ---> mSubscriptions.add(subscription)
mSubscriptions = new CompositeSubscription();
loadData();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (getLayoutView() != null) {
return getLayoutView();
}
if (getLayoutId() != 0) {
return inflater.inflate(getLayoutId(), null);
} else {
return super.onCreateView(inflater, container, savedInstanceState);
}
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
//设置状态栏透明
// setStatusBarColor();
super.onViewCreated(view, savedInstanceState);
//bind The View returned by {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}.
mUnBinder = ButterKnife.bind(this, view);
//init views events here so we can use ButterKnife
initViews(view, savedInstanceState);
}
@Override
public void onDestroy() {
super.onDestroy();
mSubscriptions.clear();
}
@Override
public void onDestroyView() {
super.onDestroyView();
//ButterKnife unbind
if (mUnBinder != null) {
mUnBinder.unbind();
mUnBinder = null;
}
}
public String getFragmentUrl() {
return mUrl;
}
public void setFragmentUrl(String url) {
this.mUrl = url;
}
/**
* Every fragment has to inflate a layout in the onCreateView method.
* We have added this method to avoid duplicate all the inflate code in every fragment.
* You only have to return the layout to inflate in this method when extends AbsBaseFragment.
*/
protected abstract int getLayoutId();
public View getLayoutView() {
return null;
}
/**
* override this method to use Dagger2 which support for Dependency Injection
* <p>
* using dagger2 in base class:https://github.com/google/dagger/issues/73
*/
// protected void initDagger2(ActivityComponent activityComponent) {
// activityComponent.inject(this);
// }
/**
* override this method to do operation in the fragment
*/
protected abstract void initViews(View rootView, Bundle savedInstanceState);
protected abstract void loadData();//load data in onCreate method
// protected void showToast(String content) {
// mToastUtils.showToast(content);
// }
// protected void showLog(String logInfo) {
// Timber.i(logInfo);
// }
// public DataManager getDataManager() {
// if (mContext == null) {
// return null;
// }
// if (mDataManager == null) {
// mDataManager = MyApplication.get(mContext).getDataManager();
// }
// return mDataManager;
// }
// public void setStatusBarColor() {
// StatusBarUtil.setTranslucentForImageViewInFragment(getActivity(), null);
// }
protected void setToolBar(Toolbar toolbar, String title) {
toolbar.setTitle(title);
toolbar.setNavigationIcon(R.mipmap.ic_arrow_back_white_24dp);
// toolbar.setNavigationOnClickListener(v -> onBackPressedSupport());
}
}