2012-07-31 3 views
-1

여기보다 더 의도 tabhost 내 질문입니다 : 내 세 개의 탭이 하나 같이 정의와 난, 정상 tabactivity 있습니다안드로이드 : 탭

TabSpec listatabs= tabHost.newTabSpec("App"); 
    listatabs.setIndicator("Lista", getResources().getDrawable(R.drawable.mia_lista)); 
    Intent listaIntent = new Intent(this, MIALISTA.class); 
    listaIntent .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    listatabs.setContent(listaIntent); 
    // Aggiungo i tabs 
    tabHost.addTab(listatabs); 

문제는 : 사용자가 (이 탭에 가면) 항목을 클릭하고 항목을 클릭하면 내용을 표시하는 새로운 의도 (물론 새로운 .class)를 호출해야하지만 ... intrested 탭에 남아 있어야합니다. 어떻게이 아이디어를 구현할 수 있습니까?

활동 A의
public class HomeTabGroupActivity extends TabGroupActivity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    startChildActivity("HomeMainActivity", new Intent(this, HomeMainActivity.class)); 

} 
} 

는이를 사용 : 예를 들어 'HomeTabGroupActivity'에 대한 사용자 지정 활동에

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

:

가 클래스 TabGroupActivity합니다

+0

당신이 말하는 이들 항목은 탭입니까? 아니면 현재 탭에서보고 싶은 다른 활동입니까? – slybloty

+0

다른 활동 ... 나는 이것이 다음과 같은 생각이라고 생각합니다. 그러나 그것은 저에게 새로운 것들이기 때문에 확실하지 않습니다. http://stackoverflow.com/questions/1306689/launching-activities-within-a-tab- in-android – Zak

답변

2

사용자 정의 ActivityGroup를 사용하여 활동으로 이동 B :

Intent i = new Intent(getParent(),ActivityB.class); 
     TabGroupActivity parentActivity = (TabGroupActivity)getParent(); 
     parentActivity.startChildActivity("ActivityB", i); 

탭에서 'HomeTabGroupActivity'로 이동하십시오

탭 그룹 내에서 startActivityForResult를 사용하고 싶다면 조금 수정 해주세요.

+0

나는 이것을 구현하려하고있다. 나는 – Zak

+0

을 알았다. 그 생각은 이것이다. 지금 고마워! – Zak