2013-03-14 2 views
2

tabHost를 사용하여 내 응용 프로그램에서 4 개의 탭을 만들었으므로 제대로 작동합니다. 첫 번째 탭을 클릭하면 해당 XML 페이지가로드되고 세부 정보가 표시됩니다. 그 페이지에서 하나의 버튼이 있습니다. 버튼을 클릭하면 인 텐트를 사용하는 다른 활동이로드됩니다. 내 문제는 같은 탭에 해당 활동을 표시하는 방법입니까?탭 활동에서 하위 활동을 만드는 방법

+0

[this] (http://united-coders.com/nico-heid/use-android-activitygroup-within-tabhost-to-show-different-activity/) 자습서와 [this] (http : /gamma-point.com/content/android-how-have-multiple-activities-under-single-tab-tabactivity) –

답변

4

당신은 InterMediateActivity

로 이동 첫째,

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)); 


    } 



} 

다음과 같이 다른 활동에이 클래스를 확장하는 대신 직접 탭에서 내부 활동을 호출하는이 클래스

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

를 사용해야합니다

다음과 같이

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

+0

그냥 전화 걸기 –

+0

Thanx yar ..... /. – SibinF

관련 문제