5

私は現在、メイン ビューが 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 つのアクティビティでボタンを押すにはどうすればよいでしょうか?

4

2 に答える 2

0

Map アクティビティに切り替えたい場所のボタンをクリックして、以下の行を配置します。

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

そしてMainViewで次の関数を作成します

public void setTabMap()
{
   //as Map activity is your first tab so pass 0 as index
   getTabHost().setCurrentTab(0);
}
于 2014-12-10T18:25:33.540 に答える
0

タブの変更はhttp://developer.android.com/reference/android/widget/TabHost.html#setCurrentTab(int)TabHostで簡単に行うことができますsetCurrentTab(int)

他のアクティビティへのイベントの送信は、ブロードキャスト インテントを送信し、それを他の で受信/処理することで簡単に実現できますActivity

または、すべてのタブ アクティビティへの静的参照を保存して (醜い...)、メソッドを直接呼び出すこともできます。

于 2012-03-06T14:30:39.763 に答える