我目前在一个 Android 项目中,我们的主视图是一个 TabActivity,每个选项卡都是一个单独的 Activity。一个是MapActivity,另外两个是普通的Activity。
首先请注意,我认为我们必须将每个选项卡作为单独的活动,因为单独的活动中有太多代码,无法让 TabHost 在选项卡更改时切换内容视图并将所有代码放在同一个类中。无论如何,回到问题。
其中一个选项卡包括一个按钮,当按下该按钮时,应使 TabActivity 切换到 MapActivity 并将地图动画化到特定位置。
http://joshclemm.com/blog/?p=86上的教程显示了如果 TabHost 包含地图视图和列表视图时如何执行此操作。如果单击 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 中的选项卡并触发该选项卡活动的更改?