ActionBar, Fragements und startActivity

  • 1 Antworten
  • Letztes Antwortdatum
H

henningp

Neues Mitglied
0
Hallo zusammen,

da TabHost inkl. deren ActivityGroups (was m.E. die Lösung nach dem deprected-format ist) ja mittlerweile deprecated sind, versuche ich mich gerade in Fragments und die ActionBar einzuarbeiten. Die Anzeige der Bar und der Fragments funktioniert wie erwartet, allerdings starte ich in einem Fragment eine neue Activity (nicht von mir, Fremdkomponente). Diese wird natürlich Fullscreen angezeigt und nicht im dargestellten Fragment.

Beispiel-Code:

MainActivity
Code:
@Override
protected void onCreate(final Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     ActionBar actionBar = getActionBar();
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
     actionBar.addTab(actionBar.newTab().setText("TestFragment")
            .setTabListener(new MyTabListener(this, new TestFragment())));
}
TestFragment
Code:
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup   container, final Bundle savedInstanceState) {
     return super.onCreateView(inflater, container, savedInstanceState);
}

@Override
public void onActivityCreated(final Bundle savedInstanceState) {
     super.onActivityCreated(savedInstanceState);
     Intent intent = new Intent(getActivity(), xx.xx.ForeginActivity.class);
     startActivity(scanIntent);
}
Wie schaffe ich es, dass meine ActionBar beim Aufruf der neuen Activity bestehen bleibt? Der View der neugestartete Activity soll quasi im TestFragment angezeigt werden, gibt es dafür eine Möglichkeit?

Danke im Vorraus,
Henning
 
Ganz valide scheint es wohl nicht zu gehen (ohne Nutzung der deprecated Klassen). Aber Folgendes hat jetzt funktioniert:

MainActivity extends ActivityGroup
Code:
@Override protected void onCreate(final Bundle savedInstanceState) {    
     super.onCreate(savedInstanceState);     
     setContentView(R.layout.main);      
     ActionBar actionBar = getActionBar();     
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);     
     actionBar.addTab(actionBar.newTab().setText("TestFragment")setTabListener(new MyTabListener(this, new TestFragment()))); 
}

public void startExternalActivity() {
    Intent externalIntent = new Intent(this, ForeignActivity.class);
    Window window = getLocalActivityManager().startActivity("External", externalIntent);
    view = window.getDecorView();
    setContentView(view);
}
MyTabListener
Code:
@Override
public void onTabSelected(final Tab tab, final FragmentTransaction fragmentTransaction) {
    if (EXTERNAL_ACTIVITY.equals(tab.getText().toString())) {
        startExternalActivity();
    } else {
        setContentView(R.layout.main);
        fragmentTransaction.replace(R.id.fragment_container, fragment);
    }
}
Im onTabSelected des TabListeners prüfe ich vorher, ob es sich um den Aufruf der externen Activity handelt, oder um eine meiner eigenen Fragmente. Je nachdem wird dann der ContentView ersetzt oder eine FragmentTransaction vollzogen.
 
Zurück
Oben Unten