android中使用回调接口实现底部菜单的切换

来源:互联网 发布:仿折800源码 编辑:程序博客网 时间:2024/06/01 07:44

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 stubinflate(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);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (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;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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);}@Overridepublic void onTabChange(String tag) {// TODO Auto-generated method stubif (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);}}}}

精益求精方可融会贯通!


0 0