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);
}
}
}
}
精益求精方可融会贯通!