2013-03-14 115 views
2

我已在应用程序中使用tabHost创建了4个选项卡,它工作正常。 当我点击我的第一个标签时,它会加载相应的xml页面并显示一些细节。在那个页面中,有一个按钮在那里,当我点击那个按钮时,它会使用一个Intent.My问题来加载另一个活动。如何在同一Tab中显示该活动?如何在选项卡活动中创建子活动

+0

check [this](http://united-coders.com/nico-heid/use-android-activitygroup-within-tabhost-to-show-different-activity/)tutorial and also [this](http:/ /gamma-point.com/content/android-how-have-multiple-activities-under-single-tab-tabactivity) – 2013-03-14 11:19:59

回答

4

您必须使用这个类

import java.util.ArrayList; 
import android.app.Activity; 
import android.app.ActivityGroup; 
import android.app.LocalActivityManager; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.Window; 

public class TabActivityGroup 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(); 
     } 
    } 
} 

扩展此类到另一个活动,如下

import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 

public class InterMediateActivity extends TabActivityGroup{ 
    String TabID; 
    String TabName; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     TabID=getIntent().getStringExtra("TabID"); 
     TabName=getIntent().getStringExtra("TabName"); 
     Log.i("Tab from intermediate",""+TabID+" "+TabName); 
     filterTabs(TabID); 
    } 
    private void filterTabs(String TabID) 
    { 
       startChildActivity("Options", new Intent(this,HomePage.class)); 


    } 



} 

而不是直接调用从标签内的活动,首先导航到InterMediateActivity

如下

Intent intent = new Intent(this, InterMediateActivity.class); 
      intent.putExtra("TabID", item.elementAt(0)); 
      intent.putExtra("TabName", item.elementAt(1)); 
      specTab.setContent(intent); 

      mTabHost.addTab(specTab); 
+0

如何从内部活动返回到主标签活动? – SibinF 2013-03-14 11:29:27

+0

只需致电完成 – 2013-03-14 11:39:04

+0

Thanx yar ..... /。 – SibinF 2013-03-15 05:45:28

相关问题