私は現在、メイン ビューが TabActivity であり、各タブが個別のアクティビティである Android プロジェクトにいます。1 つは MapActivity で、残りの 2 つは通常のアクティビティです。
最初に、各タブを個別のアクティビティとして持つ必要があることに注意してください。個別のアクティビティにはコードが多すぎて、TabHost がタブの変更時にコンテンツ ビューを切り替えて、すべてのコードを同じクラスに配置するだけでは不十分です。とにかく、問題に戻ります。
タブの 1 つにはボタンが含まれており、これを押すと、TabActivity が MapActivity に切り替わり、マップが特定の場所にアニメーション化されます。
http://joshclemm.com/blog/?p=86にあるチュートリアルは、TabHost に mapview と listview が含まれている場合の方法を示しています。ListView 内のアイテムがクリックされると、TabHost は mapview に切り替わり、その場所 (それらの座標) にアニメーション化されます。これは、別のアクティビティのボタンが押されたときに行う必要があることです。
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 のタブを切り替え、そのタブ アクティビティで変更を発生させるために、1 つのアクティビティでボタンを押すにはどうすればよいでしょうか?