TabActivity之间跳转、传值

 

  一、 TabActivity之间跳转和传值已经成了一个很普遍的问题,下面先介绍一下跳转这个问题:

1.很多时候我们的项目跳转不在局限于点击TabWidget的时候跳转到TabAcitvity的子项,而是点击子项之间跳转到其他子项,如果我们之间用Intent跳转的话是不会进入子项的,只有通过mTabHost.setCurrentTabByTag("tab1"),这样的操作才能跳转到子项,这是两个Activity之间的传递我们可以通过广播或者借口来实现,本篇先介绍一下通过借口来传递任务吧:

首先我们建一个接口:
public interface Task {
	/**
	 * 刷新跳转的当前页面
	 * @param page 跳转到该页面的标识
	 * @param map  传入的参数(自己可根据需要修改参数)
	 */
	void onRefresh(int page,HashMap<String, Object> map);
}
在TabActivity中实现该接口,在其他子项回调该接口, 主要要注意一点就是该怎么回调,要怎么回调才是我目前的TabActivity,我做了以下操作,把当前的Activity添加到了list集合里面,去的时候用集合里面的:
/**
 * 工具类
 * @author glacier
 *
 */
public class Util {

	private static ArrayList<Task> allActivity;
	
	/**
	 * 重置allActivity
	 * @param iw 需要更新Activity
	 */
	public static void removeActivity() {
		allActivity=null;
		allActivity = new ArrayList<Task>();
	}
	
	/**
	 * 把需要更新Activity添加到集合里
	 * @param iw 需要更新Activity
	 */
	public static void addActivity(Task iw) {
		allActivity.add(iw);
	}
	
	/**
	 * 根据Activity的名字获取要更新的界面
	 * @param name 需要更新Activity的名字
	 * @return
	 */
	public static Task getActivityByName(String name) {
		System.out.println("ssss"+allActivity);
		for (Task iw : allActivity) {
			if (iw.getClass().getName().indexOf(name) >= 0) {
				return iw;
			}
		}
		return null;
	}
}
如果我们点击子项跳转的时候我们就调用TabActivity的设置标签的方法,传参也是我无意中发现的,当我们设置标签的时候会用到Intent,我们都是用这个传的,经过试验设置标签的时候是会重新设置Intent的,这样我们的传参问题也解决了.我们就可以在主类和子类中任意切换了:
/**
	 * 初始化数据
	 */
	private void init() {
		// 把这个Activity添加到集合里,从集合里面取,如果不这样添加回调回来的不是该Activity
		Util.removeActivity();
		Util.addActivity(this);

		tab1 = (TextView) findViewById(R.id.tab1);
		tab2 = (TextView) findViewById(R.id.tab2);
		tab3 = (TextView) findViewById(R.id.tab3);

		tabIntent1 = new Intent(this, Activity1.class);
		tabIntent2 = new Intent(this, Activity2.class);
		tabIntent3 = new Intent(this, Activity3.class);

		mTabHost = getTabHost();
		mTabHost.addTab(mTabHost.newTabSpec("tab1").setContent(tabIntent1)
				.setIndicator("tab1"));
		mTabHost.addTab(mTabHost.newTabSpec("tab2").setContent(tabIntent2)
				.setIndicator("tab2"));
		mTabHost.addTab(mTabHost.newTabSpec("tab3").setContent(tabIntent3)
				.setIndicator("tab3"));
		tab1.setBackgroundColor(Color.RED);

		tab1.setOnClickListener(this);
		tab2.setOnClickListener(this);
		tab3.setOnClickListener(this);
		
	}

	/**
	 * 下面按钮的默认未选中背景
	 */
	private void setDefaultImage() {
		// TODO Auto-generated method stub
		tab1.setBackgroundColor(Color.WHITE);
		tab2.setBackgroundColor(Color.WHITE);
		tab3.setBackgroundColor(Color.WHITE);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		setDefaultImage();
		switch (v.getId()) {
		case R.id.tab1:
			tabIntent1.putExtra("tv1","点击TabWidget跳转滴");
			tab1.setBackgroundColor(Color.RED);
			mTabHost.setCurrentTabByTag("tab1");
			break;
		case R.id.tab2:
			tabIntent2.putExtra("tv1","点击TabWidget跳转滴");
			tab2.setBackgroundColor(Color.RED);
			mTabHost.setCurrentTabByTag("tab2");
			break;
		case R.id.tab3:
			tabIntent3.putExtra("tv1","点击TabWidget跳转滴");
			tab3.setBackgroundColor(Color.RED);
			mTabHost.setCurrentTabByTag("tab3");
			break;
		}
	}

	@Override
	// 接口回调
	public void onRefresh(int page, HashMap<String, Object> map) {
		// TODO Auto-generated method stub
		setDefaultImage();
		switch (page) {
		case 1:
			byValue(tabIntent1, map);
			tab1.setBackgroundColor(Color.RED);
			mTabHost.setCurrentTabByTag("tab1");
			break;
		case 2:
			byValue(tabIntent2, map);
			tab2.setBackgroundColor(Color.RED);
			mTabHost.setCurrentTabByTag("tab2");
			break;
		case 3:
			byValue(tabIntent3, map);
			tab3.setBackgroundColor(Color.RED);
			mTabHost.setCurrentTabByTag("tab3");
			break;
		}
	}
	
	/**
	 * 用来传值
	 * @param intent
	 * @param map
	 */
	private void byValue(Intent intent,HashMap<String, Object> map){
		if(map!=null){
			intent.putExtra("tv1", map.get("tv1").toString());
		}else{
			intent.putExtra("tv1", "");
		}
	}

子项的Activity调用:
Util.getActivityByName("MainActivity").onRefresh(2, map);
就可以了!!!
下面让大家看下我实现的效果:
TabActivity之间跳转、传值_第1张图片

上面的标签是显示从哪跳转过来的,输入框可自己输入参数,可以跳出TabActivity,在外面在跳入任意TabActivity子项
以上就是用接口实现的方法,如有疑问欢迎提出!!!
本人 原创.如需参考请注明博客地址... http://blog.csdn.net/wang_yubin
源码 我已上传请 点击我

你可能感兴趣的:(TabActivity之间跳转、传值)