仿微信滑动Tab框架

1.activity界面

package cn.com.dsyc.canteenappforseller;

import cn.com.dsyc.canteenappforseller.widget.ActionBarItem;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

public class MainActivity extends FragmentActivity implements MyReceiver.OnReceiveListener {

	private MyReceiver mReceiver;
	private ActionBarItem[] mActionBarItems;
	private FragmentBase[] mFragments;
	private ViewPager mViewPager;
	private int mPosition;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mReceiver = new MyReceiver(this);
		mReceiver.register(this);
		findWidget();
		createTabs();
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();

		mReceiver.unregister(this);
	}

	@Override
	public void onReceive(String action) {
		// TODO Auto-generated method stub
		if (action.equals(MyReceiver.ACTION_LOGOUT)) {
			finish();
		}
	}

	private void createTabs() {
		OnClickListener tabItemClickListener = new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				int position = (Integer)v.getTag();
				mViewPager.setCurrentItem(position, false);
			}
			
		};
		
		mActionBarItems = new ActionBarItem[]{
			new ActionBarItem(this, R.string.scan, R.drawable.scan_selected, R.drawable.scan_normal, R.color.action_bar_text_on_color, R.color.action_bar_text_color),
			new ActionBarItem(this, R.string.manage, R.drawable.manage_selected, R.drawable.manage_normal, R.color.action_bar_text_on_color, R.color.action_bar_text_color),
			new ActionBarItem(this, R.string.me, R.drawable.me_selected, R.drawable.me_normal, R.color.action_bar_text_on_color, R.color.action_bar_text_color)
		};
		for (int i = 0; i < mActionBarItems.length; i++) {
			mActionBarItems[i].setTag(i);
			mActionBarItems[i].setOnClickListener(tabItemClickListener);
		}

		LinearLayout llTabs = (LinearLayout)findViewById(R.id.ll_tabs);
		LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT);
		layoutParams.weight = 1;
		for (ActionBarItem tabItem : mActionBarItems) {
			llTabs.addView(tabItem, layoutParams);
		}
		
		mFragments = new FragmentBase[] {
			new ScanFragment(),
			new ManageFragment(),
			new MeFragment()
		};
		
		mViewPager.setOffscreenPageLimit(mFragments.length - 1);
		mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()){

			@Override
			public Fragment getItem(int position) {
				// TODO Auto-generated method stub
				return mFragments[position];
			}

			@Override
			public int getCount() {
				// TODO Auto-generated method stub
				return mFragments.length;
			}
			
		});
		mViewPager.setOnPageChangeListener(new OnPageChangeListener(){

			@Override
			public void onPageScrolled(int position, float positionOffset,
					int positionOffsetPixels) {
				// TODO Auto-generated method stub
				if (positionOffset > 0) {
					if (mPosition == position)
						transitTabItem(position + 1, positionOffset);
					else
						transitTabItem(position, 1 - positionOffset);
				}
			}

			@Override
			public void onPageSelected(int position) {
				// TODO Auto-generated method stub
				setTabItemOn(position);
			}

			@Override
			public void onPageScrollStateChanged(int state) {
				// TODO Auto-generated method stub
				
			}
			
		});
		
		mPosition = 0;
		mActionBarItems[mPosition].setOnPercent(1);
		mViewPager.setCurrentItem(mPosition);
	}<pre name="code" class="java"><span style="font-family: Arial, Helvetica, sans-serif;">	private void findWidget() {</span>
mViewPager = (ViewPager)findViewById(R.id.vp);}private void transitTabItem(int position, float percent) {mActionBarItems[position].setOnPercent(percent);mActionBarItems[position].setOnPercent(percent);}private void setTabItemOn(int position) {mActionBarItems[mPosition].setOnPercent(0);mPosition = position;mActionBarItems[mPosition].setOnPercent(1);}}

 2、activity_main.xml界面 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    tools:context=".MainActivity" >
    
	<android.support.v4.view.ViewPager
	    android:id="@+id/vp"
	    android:layout_width="match_parent"
	    android:layout_height="match_parent"
	    android:layout_above="@+id/divider" />

    <View
        android:id="@id/divider"
        style="@style/Divider"
        android:layout_above="@+id/ll_tabs" />

    <LinearLayout
        android:id="@+id/ll_tabs"
        android:layout_width="match_parent"
        android:layout_height="@dimen/action_bar_height"
        android:layout_alignParentBottom="true"
        android:background="@color/action_bar_background"
        android:orientation="horizontal" />

</RelativeLayout>
3.ActionBarItem.java

package cn.com.dsyc.canteenappforseller.widget;

import cn.com.dsyc.canteenappforseller.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;

public class ActionBarItem extends FrameLayout {

	private ActionBarIconView mTabIconView;
	private ActionBarTitleView mTabTitleView;
	private ImageView mImageViewUnread;
	private TextView mTextViewUnread;
	
	public ActionBarItem(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		init();
	}
	
	public ActionBarItem(Context context, int textId, int onResId, int offResId, int onTextColorId, int offTextColorId) {
		super(context);
		// TODO Auto-generated constructor stub
		init();
		
		mTabIconView.setImageResource(onResId, offResId);
		mTabTitleView.setTextColorResource(onTextColorId, offTextColorId);
		mTabTitleView.setText(textId);
		mImageViewUnread.setVisibility(GONE);
		mTextViewUnread.setVisibility(GONE);
	}
	
	public void setUnread(boolean hasUnread) {
		mImageViewUnread.setVisibility(hasUnread ? VISIBLE : GONE);
		mTextViewUnread.setVisibility(GONE);
	}
	
	public void setUnread(int count) {
		mImageViewUnread.setVisibility(GONE);
		if (count == 0) {
			mTextViewUnread.setVisibility(GONE);
		} else {
			mTextViewUnread.setVisibility(VISIBLE);
			mTextViewUnread.setText(String.valueOf(count));
		}
	}
	
	public void setOnPercent(float onPercent) {
		mTabIconView.setOnPercent(onPercent);
		mTabTitleView.setOnPercent(onPercent);
	}
	
	private void init() {
		LayoutInflater.from(getContext()).inflate(R.layout.action_bar_item, this, true);
		findWidget();
	}
	
	private void findWidget() {
		mTabIconView = (ActionBarIconView)findViewById(R.id.tiv);
		mTabTitleView = (ActionBarTitleView)findViewById(R.id.ttv);
		mImageViewUnread = (ImageView)findViewById(R.id.iv_unread);
		mTextViewUnread = (TextView)findViewById(R.id.tv_unread);
	}
}
4、ActionBarIconView.java

package cn.com.dsyc.canteenappforseller.widget;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.util.AttributeSet;
import android.widget.ImageView;

public class ActionBarIconView extends ImageView {
	private LayerDrawable mLayerDrawable;

	public ActionBarIconView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

	public ActionBarIconView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}
	
	public ActionBarIconView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
	}

	public void setImageResource(int onResId, int offResId) {
		// TODO Auto-generated method stub
		Drawable[] drawables = new Drawable[] {
				getResources().getDrawable(onResId),
				getResources().getDrawable(offResId) };
		mLayerDrawable = new LayerDrawable(drawables);
		setOnPercent(0);
	}

	public void setOnPercent(float onPercent) {
		mLayerDrawable.getDrawable(0).setAlpha(Math.round(255 * onPercent));
		mLayerDrawable.getDrawable(1).setAlpha(Math.round(255 * (1 - onPercent)));
		setImageDrawable(mLayerDrawable);
	}
}
5.ActionBarTitleView.java

package cn.com.dsyc.canteenappforseller.widget;

import cn.com.dsyc.canteenappforseller.utility.ColorHelper;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

public class ActionBarTitleView extends TextView {
	private int mOnColor;
	private int mOffColor;

	public ActionBarTitleView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

	public ActionBarTitleView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}

	public ActionBarTitleView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
	}

	public void setTextColorResource(int onColorId, int offColorId) {
		// TODO Auto-generated method stub
		mOnColor = getResources().getColor(onColorId);
		mOffColor = getResources().getColor(offColorId);
	}
	
	public void setOnPercent(float onPercent) {
		int color = ColorHelper.getMixColor(mOnColor, onPercent, mOffColor, 1 - onPercent);
		setTextColor(color);
	}
}

5.ManageFragment.java

package cn.com.dsyc.canteenappforseller;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;

public class ManageFragment extends FragmentBase {

	private ListView mListView;
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		View view = inflater.inflate(R.layout.fragment_manage, container, false);
		setTitleText(view, R.string.manage);

		findWidget(view);
		show();
		
		return view;
	}

	private void findWidget(View view) {
		mListView = (ListView)view.findViewById(R.id.lv);
	}
	
	private void show() {
		SettingItem[] items = {
			new SettingItem(R.drawable.manage_canteen, R.string.manage_canteen),
			new SettingItem(R.drawable.manage_category, R.string.manage_category),
			new SettingItem(R.drawable.manage_dish, R.string.manage_dish),
			new SettingItem(R.drawable.manage_period, R.string.manage_period),
			new SettingItem(R.drawable.manage_schedule, R.string.manage_schedule),
			new SettingItem(R.drawable.manage_order, R.string.manage_order),
			new SettingItem(R.drawable.manage_comment, R.string.manage_comment),
			new SettingItem(R.drawable.manage_preview, R.string.manage_preview)
		};
		mListView.setAdapter(new SettingAdapter(getActivity(), items));
		mListView.setOnItemClickListener(new OnItemClickListener(){

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				switch ((int)id) {
				case R.string.manage_canteen: showCanteen(); break;
				case R.string.manage_category: showCategory();break;
				case R.string.manage_dish: showDish();break;
				case R.string.manage_period: showPeriod();break;
				case R.string.manage_schedule: showSchedule(); break;
				case R.string.manage_order: showOrder();break;
				case R.string.manage_comment: showComment(); break;
				case R.string.manage_preview: showPreview();break;
				}
			}



		});
	}
	
	private void showPreview() {
		Intent intent = new Intent(getActivity(), PreviewActivity.class);
		startActivity(intent);
	}
	private void showOrder() {
		Intent intent = new Intent(getActivity(), OrderActivity.class);
		startActivity(intent);
	}
	private void showPeriod() {
		Intent intent = new Intent(getActivity(), PeriodActivity.class);
		startActivity(intent);
	}
	
	private void showDish() {
		Intent intent = new Intent(getActivity(), DishActivity.class);
		startActivity(intent);
	}
	
	private void showCategory() {
		Intent intent = new Intent(getActivity(), CategoryActivity.class);
		startActivity(intent);
		
	}
	
	private void showCanteen() {
		Intent intent = new Intent(getActivity(), CanteenActivity.class);
		startActivity(intent);
	}
	
	private void showSchedule() {
		Intent intent = new Intent(getActivity(), ScheduleActivity.class);
		startActivity(intent);
	}
	
	private void showComment() {
		Intent intent = new Intent(getActivity(), DishCommentActivity.class);
		startActivity(intent);
	}
}

6.MeFragment.java

package cn.com.dsyc.canteenappforseller;

import cn.com.dsyc.canteenappforseller.model.Seller;
import cn.com.dsyc.canteenappforseller.utility.RequestCode;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class MeFragment extends FragmentBase {

	private ListView mListViewSeller;
	private ListView mListViewCommon;
	private ListView mListViewWallet;
	private ListView mListViewSetting;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		View view = inflater.inflate(R.layout.fragment_me, container, false);
		setTitleText(view, R.string.me);

		findWidget(view);
		showSeller();
		showCommon();
		showWallet();
		showSetting();

		return view;
	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		if (requestCode == RequestCode.EDIT) {
			if (resultCode == Activity.RESULT_OK)
				showSeller();
		}
	}

	private void findWidget(View view) {
		mListViewSeller = (ListView) view.findViewById(R.id.lv_seller);
		mListViewCommon = (ListView) view.findViewById(R.id.lv_common);
		mListViewWallet = (ListView) view.findViewById(R.id.lv_wallet);
		mListViewSetting = (ListView) view.findViewById(R.id.lv_setting);
	}

	private void showSeller() {
		App app = (App) getActivity().getApplication();
		Seller model = app.getSeller();
		SettingItem[] items = {
				new SettingItem(R.drawable.seller, R.string.me_seller, model.UserName) };
		mListViewSeller.setAdapter(new SettingAdapter(getActivity(), items));
		mListViewSeller.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				switch ((int) id) {
				case R.string.me_seller:
					doSeller();
					break;
				}
			}

		});
	}

	private void showCommon() {
		SettingItem[] items = {
				new SettingItem(R.drawable.photo_album, R.string.me_photo_album),
				new SettingItem(R.drawable.favorites, R.string.me_favorites),
				new SettingItem(R.drawable.share, R.string.me_share) };
		mListViewCommon.setAdapter(new SettingAdapter(getActivity(), items));
		mListViewCommon.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				switch ((int) id) {
				case R.string.me_share:
					doShare();
					break;
				}
			}

		});
	}

	private void showWallet() {
		SettingItem[] items = { new SettingItem(R.drawable.wallet,
				R.string.me_wallet), };
		mListViewWallet.setAdapter(new SettingAdapter(getActivity(), items));
	}

	private void showSetting() {
		SettingItem[] items = { new SettingItem(R.drawable.setting,
				R.string.me_setting), };
		mListViewSetting.setAdapter(new SettingAdapter(getActivity(), items));
		mListViewSetting.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				switch ((int) id) {
				case R.string.me_setting:
					doSetting();
					break;
				}
			}

		});
	}
	
	private void doSeller() {
		Intent intent = new Intent(getActivity(), PersonalInfoActivity.class);
		startActivity(intent);
	}

	private void doShare() {
		Intent intent = new Intent(getActivity(), ShareActivity.class);
		startActivity(intent);
	}

	private void doSetting() {
		Intent intent = new Intent(getActivity(), SettingActivity.class);
		startActivity(intent);
	}
}

package cn.com.dsyc.canteenappforseller;

import android.content.DialogInterface.OnDismissListener;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public abstract class FragmentBase extends Fragment implements MyHandler.OnHandleListener {

	private MyHandler mHandler = new MyHandler(this);
	private ProgressDialog mProgressDialog;
	
	private boolean mFindWidget = true;
	private ImageButton mTitleBarImageButtonBackArrow;
	private View mTitleBarDivider;
	private TextView mTitleBarTextViewTitle;
	private Button mTitleBarButtonTitle;
	private FrameLayout mTitleBarFrameLayout1;
	private ImageButton mTitleBarImageButton1;
	private ImageView mTitleBarImageView1;
	private FrameLayout mTitleBarFrameLayout2;
	private ImageButton mTitleBarImageButton2;
	private ImageView mTitleBarImageView2;
	private Button mTitleBarButton;
	private RelativeLayout mLoadingBarRelativeLayout;

	protected void setTitleText(View view, int resId) {
		findWidget(view);
		mTitleBarTextViewTitle.setText(resId);
	}
	
	protected void setTitleButton(View view, String text, Object tag, OnClickListener listener) {
		findWidget(view);
		mTitleBarButtonTitle.setText(text);
		mTitleBarButtonTitle.setTag(tag);
		if (listener == null)
			mTitleBarButtonTitle.setEnabled(false);
		else {
			mTitleBarButtonTitle.setEnabled(true);
			mTitleBarButtonTitle.setOnClickListener(listener);
		}
	}
	
	protected void showBackArrow(View view, OnClickListener l) {
		findWidget(view);
		mTitleBarImageButtonBackArrow.setVisibility(View.VISIBLE);
		mTitleBarImageButtonBackArrow.setOnClickListener(l);
		mTitleBarDivider.setVisibility(View.VISIBLE);
	}
	
	protected void showImageButton1(View view, int resId, OnClickListener l) {
		findWidget(view);
		mTitleBarImageButton1.setImageResource(resId);
		mTitleBarImageButton1.setOnClickListener(l);
		mTitleBarFrameLayout1.setVisibility(View.VISIBLE);
	}
	
	protected void showImageView1(boolean visible) {
		mTitleBarImageView1.setVisibility(visible ? View.VISIBLE : View.GONE);
	}
	
	protected void showImageButton2(View view, int resId, OnClickListener l) {
		findWidget(view);
		mTitleBarImageButton2.setImageResource(resId);
		mTitleBarImageButton2.setOnClickListener(l);
		mTitleBarFrameLayout2.setVisibility(View.VISIBLE);
	}
	
	protected void showImageView2(boolean visible) {
		mTitleBarImageView2.setVisibility(visible ? View.VISIBLE : View.GONE);
	}
	
	protected void showButton(View view, int resId, OnClickListener l) {
		findWidget(view);
		mTitleBarButton.setText(resId);
		mTitleBarButton.setOnClickListener(l);
		mTitleBarButton.setVisibility(View.VISIBLE);
	}
	
	protected void enableButton(View view, boolean enabled) {
		findWidget(view);
		mTitleBarButton.setEnabled(enabled);
	}
	
	protected void showProgressDialog(int textId) {
        mProgressDialog = new ProgressDialog(getActivity(), textId);
        mProgressDialog.show();
	}
	
	protected void hideProgressDialog() {
		if (mProgressDialog == null) return;
		mProgressDialog.dismiss();
		mProgressDialog = null;
	}
	
	protected void showLoadingBar() {
		mLoadingBarRelativeLayout.setVisibility(View.VISIBLE);
	}
	
	protected void hideLoadingBar() {
		mLoadingBarRelativeLayout.setVisibility(View.GONE);
	}

	protected void sendMessage(int what) {
		sendMessage(what, null);
	}
	
	protected void sendMessage(int what, Object obj) {
		Message message = mHandler.obtainMessage();
		message.what = what;
		message.obj = obj;
		mHandler.sendMessage(message);
	}
	
	@Override
	public void onHandle(int what, Object obj) {
		
	}
	
	protected void showAlertDialog(int messageId, int titleId, OnDismissListener l) {
		String message = getString(messageId);
		showAlertDialog(message, titleId, l);
	}
	
	protected void showAlertDialog(String message, int titleId, OnDismissListener l) {
		AlertDialog dialog = new AlertDialog(getActivity(), message, titleId);
		dialog.setOnDismissListener(l);
		dialog.show();
	}
	
	protected void showAlertDialog(int messageId) {
		showAlertDialog(messageId, -1, null);
	}
	
	protected void showAlertDialog(int messageId, int titleId) {
		showAlertDialog(messageId, titleId, null);
	}

	protected void showAlertDialog(String message) {
		showAlertDialog(message, -1, null);
	}
	
	protected void showAlertDialog(String message, int titleId) {
		showAlertDialog(message, titleId, null);
	}
	
	private void findWidget(View view) {
		if (!mFindWidget)
			return;
		
		mFindWidget = false;
		mTitleBarImageButtonBackArrow = (ImageButton)view.findViewById(R.id.title_bar_ib_back_arrow);
		mTitleBarDivider = view.findViewById(R.id.title_bar_divider);
		mTitleBarTextViewTitle = (TextView)view.findViewById(R.id.title_bar_tv_title);
		mTitleBarButtonTitle = (Button)view.findViewById(R.id.title_bar_btn_title);
		mTitleBarFrameLayout1 = (FrameLayout)view.findViewById(R.id.title_bar_fl1);
		mTitleBarImageButton1 = (ImageButton)view.findViewById(R.id.title_bar_ib1);
		mTitleBarImageView1 = (ImageView)view.findViewById(R.id.title_bar_iv1);
		mTitleBarFrameLayout2 = (FrameLayout)view.findViewById(R.id.title_bar_fl2);
		mTitleBarImageButton2 = (ImageButton)view.findViewById(R.id.title_bar_ib2);
		mTitleBarImageView2 = (ImageView)view.findViewById(R.id.title_bar_iv2);
		mTitleBarButton = (Button)view.findViewById(R.id.title_bar_btn);
		mLoadingBarRelativeLayout = (RelativeLayout)view.findViewById(R.id.loading_bar_rl);
	}

}


package cn.com.dsyc.canteenappforseller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import in.srain.cube.views.loadmore.LoadMoreContainer;
import in.srain.cube.views.loadmore.LoadMoreHandler;
import in.srain.cube.views.loadmore.LoadMoreListViewContainer;
import in.srain.cube.views.ptr.PtrClassicFrameLayout;
import in.srain.cube.views.ptr.PtrDefaultHandler;
import in.srain.cube.views.ptr.PtrFrameLayout;
import in.srain.cube.views.ptr.PtrHandler;
import cn.com.dsyc.canteenappforseller.apiclient.ApiException;
import cn.com.dsyc.canteenappforseller.apiclient.ApiOrder;
import cn.com.dsyc.canteenappforseller.apiclient.ApiOrderItem;
import cn.com.dsyc.canteenappforseller.model.Canteen;
import cn.com.dsyc.canteenappforseller.model.OrderEx;
import cn.com.dsyc.canteenappforseller.model.OrderItemEx;
import cn.com.dsyc.canteenappforseller.model.Seller;
import cn.com.dsyc.canteenappforseller.utility.RequestCode;
import cn.com.dsyc.canteenappforseller.widget.LoadMoreFooterView;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;

public class ScanFragment extends FragmentBase {

	private final static int PAGE_SIZE = 5;
	private PtrClassicFrameLayout mPtrClassicFrameLayout;
	private LoadMoreListViewContainer mLoadMoreListViewContainer;
	private Button mButtonCanteen;
	private Button mButtonScan;
	private ListView mListView;
	private int mCanteenNo;
	private String mCanteenName;
	private int mPageNumber;
	private int mTotalCount;
	private OrderExAdapter mAdapter;
	private List<OrderEx> mOrderExs;
	private SparseArray<OrderItemEx[]> mOrderItemExs;
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		View view = inflater.inflate(R.layout.fragment_scan, container, false);
		setTitleText(view, R.string.scan);
		
		findView(view);
		mOrderExs = new ArrayList<OrderEx>();
		mOrderItemExs = new SparseArray<OrderItemEx[]>();
		App app = (App)getActivity().getApplication();
		Canteen canteen = app.getFirstCanteen();
		if (canteen == null) {
			mCanteenNo = -1;
			mCanteenName = "";
		} else {
			mCanteenNo = canteen.No;
			mCanteenName = canteen.Name;
		}
		mButtonCanteen.setText(mCanteenName);
		mButtonCanteen.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(getActivity(), CanteenSelectActivity.class);
				intent.putExtra("CanteenNo", mCanteenNo);
				startActivityForResult(intent, RequestCode.SELECT);
			}
			
		});
		mButtonScan.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(getActivity(), ScanActivity.class);
				intent.putExtra("CanteenNo", mCanteenNo);
				startActivityForResult(intent, RequestCode.SCAN);
			}
			
		});

        mPtrClassicFrameLayout.setLastUpdateTimeRelateObject(this);
        mPtrClassicFrameLayout.setPtrHandler(new PtrHandler() {
            @Override
            public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
                return PtrDefaultHandler.checkContentCanBePulledDown(frame, mListView, header);
            }

            @Override
            public void onRefreshBegin(PtrFrameLayout frame) {
            	mPageNumber = 1;
            	mOrderExs.clear();
            	mOrderItemExs.clear();
            	loadData();
            }
        });
        LoadMoreFooterView footerView = new LoadMoreFooterView(getActivity());
        mLoadMoreListViewContainer.setLoadMoreView(footerView);
        mLoadMoreListViewContainer.setLoadMoreUIHandler(footerView);
        mLoadMoreListViewContainer.setLoadMoreHandler(new LoadMoreHandler(){

			@Override
			public void onLoadMore(LoadMoreContainer loadMoreContainer) {
				// TODO Auto-generated method stub
				mLoadMoreListViewContainer.postDelayed(new Runnable(){

					@Override
					public void run() {
						// TODO Auto-generated method stub
						loadDataMore();
					}
					
				}, 1500);
			}
        	
        });
		loadData();
		
		return view;
	}
	
	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		if (requestCode == RequestCode.SELECT && resultCode == Activity.RESULT_OK) {
			mCanteenNo = data.getIntExtra("CanteenNo", -1);
			mCanteenName = data.getStringExtra("CanteenName");
			mButtonCanteen.setText(mCanteenName);
			loadData();
		} else if (requestCode == RequestCode.SCAN && resultCode == Activity.RESULT_OK) {
			loadData();
		}
	}

	@Override
	public void onHandle(int what, Object obj) {
		// TODO Auto-generated method stub
		switch (what) {
		case R.id.msg_load:
			mPtrClassicFrameLayout.refreshComplete();
			mLoadMoreListViewContainer.loadMoreFinish(mOrderExs.size() == 0, mTotalCount > mOrderExs.size());
			showData(false);
			break;
		case R.id.msg_load_more:
			mLoadMoreListViewContainer.loadMoreFinish((Integer)obj == 0, mTotalCount > mOrderExs.size());
			showData(true);
			break;
		case R.id.msg_network_disconnect:
			mPtrClassicFrameLayout.refreshComplete();
			mLoadMoreListViewContainer.loadMoreFinish(true, true);
			showAlertDialog(R.string.please_check_network_connection);
			break;
		case R.id.msg_network_error:
			mPtrClassicFrameLayout.refreshComplete();
			mLoadMoreListViewContainer.loadMoreFinish(true, true);
			showAlertDialog((String)obj);
			break;
		}
	}

	private void findView(View view) {
		mButtonCanteen = (Button) view.findViewById(R.id.btn_canteen);
		mButtonScan = (Button) view.findViewById(R.id.btn_scan);
		mLoadMoreListViewContainer = (LoadMoreListViewContainer) view.findViewById(R.id.lmlvc);
		mPtrClassicFrameLayout = (PtrClassicFrameLayout) view.findViewById(R.id.pcfl);
		mListView = (ListView) view.findViewById(R.id.lv);
	}
	
	private void loadData() {
		new Thread(new Runnable(){

			@Override
			public void run() {
				// TODO Auto-generated method stub
				App app = (App)getActivity().getApplication();
				Seller seller = app.getSeller();
				
				ApiOrder apiOrder = new ApiOrder();
				ApiOrderItem apiOrderItem = new ApiOrderItem();
				try {
					mOrderExs = new ArrayList<OrderEx>();
					mOrderItemExs = new SparseArray<OrderItemEx[]>();
					mPageNumber = 1;
					mTotalCount = apiOrder.getCount(seller.UserAccount, mCanteenNo);
					OrderEx[] listOrderEx = apiOrder.getPagedList(seller.UserAccount, mCanteenNo, PAGE_SIZE, mPageNumber);
					
					for (OrderEx modelOrderEx : listOrderEx) {
						mOrderExs.add(modelOrderEx);
						OrderItemEx[] listOrderItemEx = apiOrderItem.getListByOrder(modelOrderEx.No);
						mOrderItemExs.put(modelOrderEx.No, listOrderItemEx);
					}
					
					sendMessage(R.id.msg_load);
				} catch (IOException ex) {
					sendMessage(R.id.msg_network_disconnect);
				} catch (ApiException ex) {
					sendMessage(R.id.msg_network_error, ex.getMessage());
				}
			}
			
		}).start();
	}
	
	private void loadDataMore() {
		new Thread(new Runnable(){

			@Override
			public void run() {
				// TODO Auto-generated method stub
				App app = (App)getActivity().getApplication();
				Seller seller = app.getSeller();
				
				ApiOrder apiOrder = new ApiOrder();
				ApiOrderItem apiOrderItem = new ApiOrderItem();
				try {
					mPageNumber++;
					mTotalCount = apiOrder.getCount(seller.UserAccount, mCanteenNo);
					OrderEx[] listOrderEx = apiOrder.getPagedList(seller.UserAccount, mCanteenNo, PAGE_SIZE, mPageNumber);
					for (OrderEx modelOrderEx : listOrderEx) {
						mOrderExs.add(modelOrderEx);
						OrderItemEx[] listOrderItemEx = apiOrderItem.getListByOrder(modelOrderEx.No);
						mOrderItemExs.put(modelOrderEx.No, listOrderItemEx);
					}
					
					sendMessage(R.id.msg_load_more, listOrderEx.length);
				} catch (IOException ex) {
					sendMessage(R.id.msg_network_disconnect);
				} catch (ApiException ex) {
					sendMessage(R.id.msg_network_error, ex.getMessage());
				}
			}
			
		}).start();
	}

	private void showData(boolean append) {
		if (append) {
			mAdapter.notifyDataSetChanged();
		} else {
			mAdapter = new OrderExAdapter(getActivity(), mOrderExs, mOrderItemExs);
			mListView.setAdapter(mAdapter);
		}
	}
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值