2011-11-11 19 views
5

我目前在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中的选项卡并在该选项卡上触发更改活动?

回答

0

放在按钮下方一行单击要切换到地图活动

((MainView) getParent()).setTabMap(); 

和的MainView创建下面的函数

public void setTabMap() 
{ 
    //as Map activity is your first tab so pass 0 as index 
    getTabHost().setCurrentTab(0); 
}