现在的位置: 首页 > 综合 > 正文

android之代码优化(base类)

2017年05月17日 ⁄ 综合 ⁄ 共 5027字 ⁄ 字号 评论关闭

在对于开发之中,大多数公司会有自己的成熟框架,你只要按照规则去熟悉,去使用就行了,而对于开发人员来说,去了解一些代码优化有助于自己的代码开发。

而在于框架之中第一个原则:对于多次出现并且有共同点的地方必须抽取出来作为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;
		}
		
	}
}

抱歉!评论已关闭.