android中使用回調接口實現底部菜單的切換

android中底部菜單的切換可用多種方式來實現,今天介紹的是用回調接口的形式進行實現,相比較其他的方式而言,用回調的方式實現。。。。。。

直接上代碼:底部的菜單java代碼

package com.example.testqq;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.Button;
import android.widget.LinearLayout;
import android.view.View;
import android.view.View.OnClickListener;

/**
* @author zhaoshaopeng
* @version 創建時間:2015年12月10日 下午2:57:25 類說明
*/
public class TabView extends LinearLayout implements OnClickListener {
private final Button mStateButton1;
private final Button mStateButton2;
private final Button mStateButton3;
private final Button mStateButton4;
private int mState = 0;
private OnTabChangeListener mOnTabChangedListener;

public TabView(Context context) {
this(context, null);
}

public TabView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public TabView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs);
// TODO Auto-generated constructor stub
inflate(context, R.layout.view_tab, this);
mStateButton1 = (Button) findViewById(R.id.button_state1);
mStateButton2 = (Button) findViewById(R.id.button_state2);
mStateButton3 = (Button) findViewById(R.id.button_state3);
mStateButton4 = (Button) findViewById(R.id.button_state4);
mStateButton1.setOnClickListener(this);
mStateButton2.setOnClickListener(this);
mStateButton3.setOnClickListener(this);
mStateButton4.setOnClickListener(this);
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button_state1:
switchState(0);
break;
case R.id.button_state2:
switchState(1);
break;
case R.id.button_state3:
switchState(2);
break;
case R.id.button_state4:
switchState(3);
break;

default:
break;
}

}

private void switchState(int state) {
if (mState == state)
return;
mState = state;
mStateButton1.setSelected(false);
mStateButton2.setSelected(false);
mStateButton3.setSelected(false);
mStateButton4.setSelected(false);
Object tag = null;
switch (mState) {
case 0:
mStateButton1.setSelected(true);
tag = mStateButton1.getTag();
break;
case 1:
mStateButton2.setSelected(true);
tag = mStateButton2.getTag();
break;
case 2:
mStateButton3.setSelected(true);
tag = mStateButton3.getTag();
break;
case 3:
mStateButton4.setSelected(true);
tag = mStateButton4.getTag();
break;

default:
break;
}
if (mOnTabChangedListener != null) {
if (tag != null && mOnTabChangedListener != null) {
mOnTabChangedListener.onTabChange(tag.toString());
} else {
mOnTabChangedListener.onTabChange(null);
}
}

}

public void setOnTabChangeListener(OnTabChangeListener listener) {
mOnTabChangedListener = listener;
}

public void setCurrentTab(int index) {
switchState(index);
}

public static interface OnTabChangeListener {
public void onTabChange(String tag);
}
}
在以上代碼中定義了一個接口,當本頁面觸發onclick事件的時候寫入tag值,在下面的代碼中實現OnTabChangeListener接口的ontabchange方法,在此方法中進行頁面的切換。

下面是主頁面java代碼:

package com.example.testqq;

import com.example.testqq.TabView.OnTabChangeListener;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.widget.TextView;

/**
 * @author zhaoshaopeng
 * @version 創建時間:2015年12月10日 下午2:53:17 類說明
 */
public class Startactivity extends FragmentActivity implements OnTabChangeListener {
	private FragmentManager mFragmentManager;
	private Fragment mCurrentFragment;
	private TextView mTitleTextView;
	private TabView mTabView;
	/** 上一次的狀態 */
	private int mPreviousTabIndex = 1;
	/** 當前狀態 */
	private int mCurrentTabIndex = 1;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		mCurrentTabIndex = 1;
		mPreviousTabIndex = 1;
		mFragmentManager = getSupportFragmentManager();
		setupViews();
	}

	private void setupViews() {
		setContentView(R.layout.activity_main);
		// mTitleTextView = (TextView) findViewById(R.id.text_title);
		mTabView = (TabView) findViewById(R.id.view_tab);
		mTabView.setOnTabChangeListener(this);
		mTabView.setCurrentTab(mCurrentTabIndex);
		mCurrentFragment = new ServiceFragment();
		FragmentUtils.replaceFragment(mFragmentManager, R.id.layout_content, ServiceFragment.class, null, false);
	}

	@Override
	public void onTabChange(String tag) {
		// TODO Auto-generated method stub
		if (tag != null) {
			if (tag.equals("message")) {
				mPreviousTabIndex = mCurrentTabIndex;
				mCurrentTabIndex = 0;
				mCurrentFragment = FragmentUtils.switchFragment(mFragmentManager, R.id.layout_content, mCurrentFragment,
						SessionFragment.class, null, false);
			} else if ("service".equals(tag)) {
				mPreviousTabIndex = mCurrentTabIndex;
				mCurrentTabIndex = 1;
				mCurrentFragment = FragmentUtils.switchFragment(mFragmentManager, R.id.layout_content, mCurrentFragment,
						ServiceFragment.class, null, false);

			} else if (tag.equals("personal")) {
				mPreviousTabIndex = mCurrentTabIndex;
				mCurrentTabIndex = 2;
				mCurrentFragment = FragmentUtils.switchFragment(mFragmentManager, R.id.layout_content, mCurrentFragment,
						ProfileFragment.class, null, false);

			} else if (tag.equals("settings")) {
				mPreviousTabIndex = mCurrentTabIndex;
				mCurrentTabIndex = 3;
				mCurrentFragment = FragmentUtils.switchFragment(mFragmentManager, R.id.layout_content, mCurrentFragment,
						SettingFragment.class, null, false);

			}

		}

	}
}

精益求精方可融會貫通!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章