2 Stimmen

Eine weitere Aktivität innerhalb von TabHost?

Ich habe eine Registerkarte Host gemacht und zeigt 4 Registerkarten in ihnen, wie unten der Code ist

    /** Called when the activity is first created. */
      @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    TabHost tabHost = getTabHost();

    tabHost.addTab(tabHost.newTabSpec("list").setIndicator("List").setContent(
            new Intent(this, List.class)));
    tabHost.addTab(tabHost.newTabSpec("profile").setIndicator("Profile").setContent(
            new Intent(this, Profile.class)));
    tabHost.addTab(tabHost.newTabSpec("criteria").setIndicator("Criteria").setContent(
            new Intent(this, Criteria.class)));
    tabHost.addTab(tabHost.newTabSpec("more").setIndicator("More").setContent(
            new Intent(this, More.class)));
    }
 }

In Profil habe ich eine Schaltfläche, die das Profil des Benutzers bearbeiten wird, wenn ich auf die Schaltfläche klicke, ruft es Methode wie unten

    @Override
public void onClick(View v) {
System.out.println("Veer");
    Intent intent = new Intent().setClass(this, EditProfile.class);
Intent intent = new Intent(this, EditProfile.class);
}

Wo ist zeigt EditProfile, aber die Registerkarten sind nicht sichtbar, wie in iPhone es die ganze Zeit sichtbar ist, jetzt was sollte ich tun, so dass meine Registerkarten oben sein sollte und EditProfile innerhalb Profil Registerkarte sein?

1voto

Sandy Punkte 7362

Machen Sie Ihre Profile Tätigkeit extends ActivityGroup
dann fügen Sie den folgenden Code in onClick(View v)

View view = getLocalActivityManager().startActivity("EditProfile", 
        new Intent(v.getContext(),EditProfile.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
        .getDecorView();
setContentView(view);

1voto

Vicky Kapadia Punkte 5915

Die Aktivitäten auf der Registerkarte können auf folgende Weise umgeschaltet werden.

Lassen Sie uns zunächst den Fluss verstehen:

  1. Wir haben in einer Registerkarte eine Aktivität (z. B. eine Liste), von der aus wir zur nächsten Aktivität (z. B. Details für das angeklickte Element) unter derselben Registerkarte wechseln müssen. Dazu können wir das Konzept des Ersetzens der Aktivität verwenden und die Flags für die ausgewählte Registerkarte und andere Flags setzen, um zu wissen, dass die Details jetzt angezeigt werden.

  2. Anstatt die Aktivität erneut zu ersetzen, können wir die Registerkarte aktualisieren, indem wir das entsprechende Flag für die ausgewählte Registerkarte verwenden. Auch wenn das Flag für die Anzeige von Details wahr ist, werden wir die Liste in der gleichen Registerkarte oder sonst werden wir die Aktivität vor dem Tabwidget gehen (normale Verwendung von onBackPressed)

Der Code kann wie folgt aussehen..

  1. Um von der Liste zu den Details zu gelangen...

(Dies kann im onClickListener erfolgen)

private OnClickListener textListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        Constants.SHOW_DETAILS = true;
        Intent intent = new Intent(context, DetailsActivity.class);
        replaceContentView("activity3", intent);
        }
};

public void replaceContentView(String id, Intent newIntent) {
    View view = ((ActivityGroup) context)
            .getLocalActivityManager()
            .startActivity(id,
                    newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
            .getDecorView();
    ((Activity) context).setContentView(view);

}
  1. Wenn BackPressed ausgeführt wird, überschreiben wir BackPressed in jeder Aktivität unter der Registerkarte, um vom Detailbildschirm wieder zur Liste zu gelangen

    @Override
      public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    if (MathHelper.SHOW_DETAILS) {
        Log.e("back", "pressed accepted");
        Constants.LIST_ACTIVITY = 1;
        Constants.SHOW_DETAILS = false;
        Intent intent = new Intent(this, Tab_widget.class);
        startActivity(intent);
        finish();
      }
     }

Der wichtigste Teil ist hier Constants.LIST_ACTIVITY = 1; gibt an, in welcher Registerkarte wir uns befinden, so dass die entsprechenden Aktivitäten den Wert 0,1,2...usw. haben

Um die richtige Liste (Activty) zu laden, wenn die Registerkartenaktivität aktualisiert wird, müssen wir dies in das TabWidget onCreate nach der Erstellung der Registerkarten aufnehmen

tabHost.setCurrentTab(Constants.LIST_ACTIVITY);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X