对TabHost中的其他活动执行火警操作吗? (Android)
我目前在Android项目中,我们的主视图是TabActivity,每个选项卡都是单独的Activity。一个是MapActivity,另外两个是普通的活动。对TabHost中的其他活动执行火警操作吗? (Android)
首先要注意的是,我认为我们必须将每个选项卡作为单独的活动,因为单独的活动中有太多的代码只是让TabHost切换选项卡上的内容视图并使所有代码相同类。无论如何,回到问题。
其中一个选项卡包含一个按钮,当按下该按钮时,应使TabActivity切换到MapActivity并将地图动画化到特定位置。
在http://joshclemm.com/blog/?p=86上找到的教程显示了如果TabHost包含mapview和listview,该如何做到这一点。如果单击ListView中的项目,TabHost将切换到地图视图并为该位置(这些坐标)添加动画。这正是我在按下单独活动中的按钮时需要做的事情。
的MainView.java创建如下:
public class MainView extends TabActivity implements OnTabChangeListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Resources res = getResources(); // Resource object to get Drawables
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
intent = new Intent().setClass(this, MapGUI.class);
spec = tabHost.newTabSpec("map").setIndicator("Map",
res.getDrawable(R.drawable.ic_tab_menu_item))
.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, MissionView.class);
spec = tabHost.newTabSpec("mission").setIndicator("Mission",
res.getDrawable(R.drawable.ic_tab_menu_item))
.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, SIPView.class);
spec = tabHost.newTabSpec("call").setIndicator("Call",
res.getDrawable(R.drawable.ic_tab_menu_item))
.setContent(intent);
tabHost.addTab(spec);
的MissionView.java如下:
public class MissionView extends Activity implements Observer{
MissionController mc;
private TextView missionheader, missiondescription, missionaddress,
missiontime, missioninjuries;
private Button changedesc, gotoadress;
private String[] mission;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.missiontablayout);
missionheader = (TextView)findViewById(R.id.missionheader2);
missiondescription = (TextView)findViewById(R.id.missiondescription2);
missionaddress = (TextView)findViewById(R.id.missionaddress2);
missiontime = (TextView)findViewById(R.id.missiontime2);
missioninjuries = (TextView)findViewById(R.id.missioninjuries2);
changedesc = (Button)findViewById(R.id.gotoaddress);
changedesc.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// DO SOMETHING HERE?
}
});
mc = new MissionController(MissionView.this);
}
public void update(Observable observable, Object data) {
if(data instanceof String[]){
mission = (String[]) data;
updateView(mission);
}
}
public void updateView(String[] missiontext){
missionheader.setText(missiontext[0]);
missiondescription.setText(missiontext[1]);
missionaddress.setText(missiontext[2]);
missiontime.setText(missiontext[3]);
missioninjuries.setText(missiontext[4]);
}
}
有谁知道我能做到这一点?
请注意,上面提供的代码没有实际绘制到实际位置的实现,但问题仍然存在,如何在一个活动中按下按钮以切换TabHost中的选项卡并在该选项卡上触发更改活动?
在TabHost
改变标签可以很容易地setCurrentTab(int)
http://developer.android.com/reference/android/widget/TabHost.html#setCurrentTab(int)
事件发送到其他的活动可以简单地通过发送广播意图和接收/在其他Activity
处理它来实现完成。
或者,您可以将静态引用保存到所有选项卡Activities(丑陋...)并直接调用方法。
放在按钮下方一行单击要切换到地图活动
((MainView) getParent()).setTabMap();
和的MainView创建下面的函数
public void setTabMap()
{
//as Map activity is your first tab so pass 0 as index
getTabHost().setCurrentTab(0);
}