Огонь действия на другие действия в TabHost?(Android) - PullRequest
5 голосов
/ 11 ноября 2011

Я в настоящее время нахожусь в проекте Android, где наш основной вид - это TabActivity, а каждая вкладка - это отдельное действие. Один - это MapActivity, а два других - обычные действия.

Во-первых, обратите внимание, что я думаю, что каждая вкладка должна быть отдельной деятельностью, поскольку в отдельных действиях слишком много кода, чтобы 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 и вызвать изменение в этом действии вкладки

Ответы [ 2 ]

0 голосов
/ 10 декабря 2014

Поместите нижеприведенную строку на нажатие кнопки, где вы хотите переключиться на действие карты

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

и в MainView создайте следующую функцию

public void setTabMap()
{
   //as Map activity is your first tab so pass 0 as index
   getTabHost().setCurrentTab(0);
}
0 голосов
/ 06 марта 2012

изменение вкладок в TabHost может быть легко сделано с помощью setCurrentTab(int) http://developer.android.com/reference/android/widget/TabHost.html#setCurrentTab(int)

Отправка событий другим действиям может быть просто достигнута путем отправки намерения вещания и получения / обработки его в другом Activity.

В качестве альтернативы вы можете сохранить статические ссылки на все ваши вкладки Activity (некрасиво ...) и напрямую вызывать методы.

...