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);

			}

		}

	}
}

精益求精方可融会贯通!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值