在对于开发之中,大多数公司会有自己的成熟框架,你只要按照规则去熟悉,去使用就行了,而对于开发人员来说,去了解一些代码优化有助于自己的代码开发。
而在于框架之中第一个原则:对于多次出现并且有共同点的地方必须抽取出来作为base类
我作为一个小小菜鸟用一个实例帮助自己理解 写下自己的理解 (新闻开发)
第一个 对于Fragment中 有时候开发项目中,你会多次创立界面,和引入数据
package com.example.qianlong.base;
import com.example.qianlong.MainActivity;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
public abstract class BaseFragment extends Fragment implements OnClickListener {
protected Context ct;
protected SlidingMenu sm;
public View rootView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Android 新特性的fragment,在其中怎么通过按钮跳转到其他与之无关的activity啊。
在fragment中可以getActivity(),用这个就可以了*/
//自己的想法就是将getactivity引用传给CT 也就是context就可以调用其他Fragment
ct = getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//在creatview中 初始化view initview 然后将界面返回
rootView = initView(inflater);
return rootView;
}
/* (non-Javadoc)
* 在activit创建时调用的方法
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Fragment中有一个getActivity()的方法。这个方法会返回当前Fragment所附加的Activity
//获取所附加的activity得到slidingmenu
sm = ((MainActivity)getActivity()).getSlidingMenu();
//在activitiy初始化数据
initData(savedInstanceState);
}
public View getRootView(){
return rootView;
}
@Override
public void onClick(View arg0) {
}
protected abstract View initView(LayoutInflater inflater);
protected abstract void initData(Bundle savedInstanceState);
protected abstract void processClick(View v);
}
当然还有 viewpage 也可以优化 当主页面 标题栏没变的话 就可以直接在basepage里初始化 让子类去继承就可以了 唯一不同就是 中间内容 同时因为中间内容是需要判断有无网路 也可以设置进来
package com.example.qianlong.base;
import com.example.qianlong.MainActivity;
import com.example.qianlong.R;
import com.example.qianlong.utils.CommonUtil;
import com.example.qianlong.utils.CustomToast;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import com.lidroid.xutils.util.LogUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import android.content.Context;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public abstract class BasePage implements OnClickListener {
protected Context ct;
protected View contentView;
protected Button leftBtn;
protected ImageButton rightBtn;
protected ImageButton leftImgBtn;
protected ImageButton rightImgBtn;
protected TextView titleTv;
protected SlidingMenu sm;
protected LinearLayout loadfailView;
public boolean isLoadSuccess=false;
public BasePage(Context context) {
ct = context;
contentView = initView((LayoutInflater) ct
//从服务中获得XML定义的view 传递给VIEW
.getSystemService(Context.LAYOUT_INFLATER_SERVICE));
//加载中组件
loadingView = contentView.findViewById(R.id.loading_view);
loadfailView = (LinearLayout) contentView
.findViewById(R.id.ll_load_fail);
//ct是否是主类的子类
if(ct instanceof MainActivity){
sm = ((MainActivity) ct).getSlidingMenu();
}
}
//初始化标题栏
protected void initTitleBar(View view) {
leftBtn = (Button) view.findViewById(R.id.btn_left);
rightBtn = (ImageButton) view.findViewById(R.id.btn_right);
leftImgBtn = (ImageButton) view.findViewById(R.id.imgbtn_left);
rightImgBtn = (ImageButton) view.findViewById(R.id.imgbtn_right);
leftImgBtn.setImageResource(R.drawable.img_menu);
titleTv = (TextView) view.findViewById(R.id.txt_title);
leftBtn.setVisibility(View.GONE);
rightBtn.setVisibility(View.GONE);
if(leftImgBtn!=null)
leftImgBtn.setOnClickListener(this);
}
public View getContentView() {
return contentView;
}
@ViewInject(R.id.loading_view)
protected View loadingView;
public void dismissLoadingView() {
if (loadingView != null)
loadingView.setVisibility(View.INVISIBLE);
}
protected abstract View initView(LayoutInflater inflater);
public abstract void initData();
protected abstract void processClick(View v);
public void onResume() {
}
public void showToast(String msg) {
showToast(msg, 0);
}
public void showToast(String msg, int time) {
CustomToast customToast = new CustomToast(ct, msg, time);
customToast.show();
}
protected void loadData(HttpRequest.HttpMethod method, String url,
RequestParams params, RequestCallBack<String> callback) {
HttpUtils http = new HttpUtils();
http.configCurrentHttpCacheExpiry(1000 * 1);
LogUtils.allowD = true;
if (params != null) {
if (params.getQueryStringParams() != null)
LogUtils.d(url + params.getQueryStringParams().toString());
} else {
params = new RequestParams();
}
//设备ID
// params.addHeader("x-deviceid", app.deviceId);
//渠道,统计用
// params.addHeader("x-channel", app.channel);
if (0 == CommonUtil.isNetworkAvailable(ct)) {
showToast("无网络,请检查网络连接!");
} else {
http.send(method, url, params, callback);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.imgbtn_left:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
sm.toggle();
}
}, 100);
break;
default:
break;
}
}
}