2012-07-02 1 views
2

В моем приложении у меня есть четыре вкладки внизу. Каждая вкладка имеет несколько действий. Чтобы поддерживать несколько действий на одной вкладке, я использовал концепцию TabGroupActivity.My вопрос в том, когда я нажимаю на определенной вкладке, его стартовая активность должна быть перезагружена, а какой-то ребенок активность этой вкладки в onResume() state.For ясного понимания,Перезапуск одной вкладки, когда она имеет несколько активных действий в android

Tab1-A-->B-->C-->D-->E. 
    Tab2-M-->N-->B-->C-->D-->E. 
    Tab3-P. 
    Tab4-X-->Y-->B-->C-->D-->E. 

, когда я нажимаю на tab1, A активность должна быть перезапущена, тогда как одна из операций B или C или D или E находится в состоянии onresume(). Аналогично, то же самое для Tab2, Tab4 должно быть сделано. Некоторые из них, пожалуйста, предоставьте мне образец кода, поскольку я свежее. Спасибо заранее.

+0

реального времени пример/описание будет более полезным для понимания ваших требований –

ответ

1

Я нашел решение для моего вопроса, я просто переопределить метод() в TabGorupActivity в onResume. Мой TabGroupActivity является

package com.rmn.hrt; 

    import java.util.ArrayList; 



    import android.app.Activity; 
    import android.app.ActivityGroup; 
    import android.app.AlertDialog; 
    import android.app.LocalActivityManager; 
    import android.content.DialogInterface; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.view.KeyEvent; 
    import android.view.Window; 

    /** 
    * The purpose of this Activity is to manage the activities in a tab. 
    * Note: Child Activities can handle Key Presses before they are seen here. 
    * @author Eric Harlow 
    */ 
    public class TabGroupActivity extends ActivityGroup { 

     private ArrayList<String> mIdList; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState);  

      if (mIdList == null) mIdList = new ArrayList<String>(); 
     } 

     /** 
     * This is called when a child activity of this one calls its finish method. 
     * This implementation calls {@link LocalActivityManager#destroyActivity} on the child activity 
     * and starts the previous activity. 
     * If the last child activity just called finish(),this activity (the parent), 
     * calls finish to finish the entire group. 
     */ 
     @Override 
     public void finishFromChild(Activity child) { 
      LocalActivityManager manager = getLocalActivityManager(); 
      int index = mIdList.size()-1; 

      if (index < 1) { 
       finish(); 
       return; 
      } 

      manager.destroyActivity(mIdList.get(index), true); 
      mIdList.remove(index); index--; 
      String lastId = mIdList.get(index); 
      Intent lastIntent = manager.getActivity(lastId).getIntent(); 
      Window newWindow = manager.startActivity(lastId, lastIntent); 
      setContentView(newWindow.getDecorView()); 
     } 

     /** 
     * Starts an Activity as a child Activity to this. 
     * @param Id Unique identifier of the activity to be started. 
     * @param intent The Intent describing the activity to be started. 
     * @throws android.content.ActivityNotFoundException. 
     */ 
     public void startChildActivity(String Id, Intent intent) {  
      Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
      if (window != null) { 
       mIdList.add(Id); 
       setContentView(window.getDecorView()); 
      }  
     } 

     /** 
     * The primary purpose is to prevent systems before android.os.Build.VERSION_CODES.ECLAIR 
     * from calling their default KeyEvent.KEYCODE_BACK during onKeyDown. 
     */ 
     @Override 
     public boolean onKeyDown(int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK) { 
       //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR 
       return true; 
      } 
      return super.onKeyDown(keyCode, event); 
     } 

     /** 
     * Overrides the default implementation for KeyEvent.KEYCODE_BACK 
     * so that all systems call onBackPressed(). 
     */ 
     @Override 
     public boolean onKeyUp(int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK) { 
       onBackPressed(); 
       return true; 
      } 
      return super.onKeyUp(keyCode, event); 
     } 

     /** 
     * If a Child Activity handles KeyEvent.KEYCODE_BACK. 
     * Simply override and add this method. 
     */ 
     @Override 
     public void onBackPressed () { 
      int length = mIdList.size(); 
      if (length > 1) { 
       Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1)); 
       current.finish(); 
      } 
    } 
//Removing all string identifiers for the child activities 
// except the first activity from mIdList and showing it's view 
    @Override 
    protected void onResume() { 
     LocalActivityManager startManager=getLocalActivityManager(); 
      int index = mIdList.size() - 1; 
      while(index>=1){ 
      startManager.destroyActivity(mIdList.get(index), true); 
      mIdList.remove(index); 
      index--; 
      } 
      String lastId = mIdList.get(index); 
      Intent lastIntent = startManager.getActivity(lastId).getIntent(); 
      Window newWindow =startManager.startActivity(lastId, lastIntent); 
      setContentView(newWindow.getDecorView()); 
     super.onResume(); 
    } 

    } 
0

попробовать это

TabWidget twidget = mTabHost.getTabWidget(); 

    twidget.getChildAt(0).setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
    //Start you base activity 
    mTabHost.setCurrentTab(0); 
    } 
    }); 
+0

Привет Naeem я реализовал свою логику, но это не работает –

+0

пожалуйста, вы можете разместить свой код. Он должен работать. –

Смежные вопросы