Dynamische Veränderung der Fragmente in einem Fragment Tab Host?

Ich habe eine Haupttätigkeit, die Fragment-Aktivität hier ist, stelle ich zwei Tabs mit zwei Fragmenten A und B in der B-Fragment Ich habe eine Schaltfläche, wenn der Benutzer auf die Schaltfläche klicken, möchte ich Fragment B zu Fragment C ändern. Aber die Registerkarten oben Sind sichtbar …

Wie kann ich das Ersetzen von Fragmenten innerhalb von Tabs erreichen?

  • Freigeben von Bildern, die im internen Speicher gespeichert sind
  • Fragment nicht auftauchen
  • Cordova 3.0 FileWriter THREAD WARNUNG: exec () Aufruf von File.write blockiert den Hauptthread ... sollte CordovaInterface.getThreadPool () verwenden
  • Mit einem local_manifest.xml mit repo
  • In-App-Kauf Promo-Codes bricht Remote-Server-Überprüfung?
  • Android onTouchEvent Koordinaten überspringen
  • Jede Lösung wird sehr geschätzt.

  • "Hardware Section" fehlt unter Android Virtual Device Manager
  • Versuch, Stroh android Aktivitätsklasse mit PowerMockito wirft RuntimeException "Stub!"
  • Das Ersetzen eines Fragments mit sich selbst zeigt nichts
  • Wie kann ich feststellen, wann Android WebView komplett fertig ist?
  • Symbolleiste in DialogFragment
  • Android: Zugriff auf gespeicherte Google-Standorte programmgesteuert
  • One Solution collect form web for “Dynamische Veränderung der Fragmente in einem Fragment Tab Host?”

    Grundkonzept – Wir erreichen dies durch die Erstellung eines Containers. Jeder Tab wird mit einem bestimmten Container vergeben. Jetzt, wenn wir ein neues Fragment brauchen, dann werden wir das gleiche durch diesen Container ersetzen.

    Bitte folgen Sie dem untergeordneten Code Schritt für Schritt, um besser zu verstehen. Schritt 1: Erstellen von Tabs für Ihre App. Sagen Sie "Home.java". Es enthält Code für die Erstellung von Tabs mit Fragment.

    import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTabHost; import android.widget.TextView; import app.drugs.talksooner.container.GoContainerFragment; import app.drugs.talksooner.container.LearnContainerFragment; import app.drugs.talksooner.container.MoreContainerFragment; import app.drugs.talksooner.container.TalkContainerFragment; import app.drugs.talksooner.container.WatchContainerFragment; import app.drugs.talksooner.utils.BaseContainerFragment; public class Home extends FragmentActivity { private static final String TAB_1_TAG = "tab_1"; private static final String TAB_2_TAG = "tab_2"; private static final String TAB_3_TAG = "tab_3"; private static final String TAB_4_TAG = "tab_4"; private static final String TAB_5_TAG = "tab_5"; private FragmentTabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); initView(); } private void initView() { mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); // mTabHost.addTab(mTabHost.newTabSpec(TAB_1_TAG).setIndicator("Talk", getResources().getDrawable(R.drawable.ic_launcher)), TalkContainerFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec(TAB_1_TAG).setIndicator("Talk"), TalkContainerFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec(TAB_2_TAG).setIndicator("Learn"), LearnContainerFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec(TAB_3_TAG).setIndicator("Go"), GoContainerFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec(TAB_4_TAG).setIndicator("Watch"), WatchContainerFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec(TAB_5_TAG).setIndicator("More"), MoreContainerFragment.class, null); /* Increase tab height programatically * tabs.getTabWidget().getChildAt(1).getLayoutParams().height = 150; */ for (int i = 0; i < mTabHost.getTabWidget().getChildCount(); i++) { final TextView tv = (TextView) mTabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title); if (tv == null) continue; else tv.setTextSize(10); } } @Override public void onBackPressed() { boolean isPopFragment = false; String currentTabTag = mTabHost.getCurrentTabTag(); if (currentTabTag.equals(TAB_1_TAG)) { isPopFragment = ((BaseContainerFragment)getSupportFragmentManager().findFragmentByTag(TAB_1_TAG)).popFragment(); } else if (currentTabTag.equals(TAB_2_TAG)) { isPopFragment = ((BaseContainerFragment)getSupportFragmentManager().findFragmentByTag(TAB_2_TAG)).popFragment(); } else if (currentTabTag.equals(TAB_3_TAG)) { isPopFragment = ((BaseContainerFragment)getSupportFragmentManager().findFragmentByTag(TAB_3_TAG)).popFragment(); } else if (currentTabTag.equals(TAB_4_TAG)) { isPopFragment = ((BaseContainerFragment)getSupportFragmentManager().findFragmentByTag(TAB_4_TAG)).popFragment(); } else if (currentTabTag.equals(TAB_5_TAG)) { isPopFragment = ((BaseContainerFragment)getSupportFragmentManager().findFragmentByTag(TAB_5_TAG)).popFragment(); } if (!isPopFragment) { finish(); } } } 

    Ihre home.xml Datei

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <FrameLayout android:id="@+id/realtabcontent" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" /> <android.support.v4.app.FragmentTabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="wrap_content" > <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dip" android:layout_height="0dip" android:layout_weight="0" /> </android.support.v4.app.FragmentTabHost> </LinearLayout> 

    Schritt 2: Definieren Sie das Basis-Container-Fragment, das für das Backtracking und das Ersetzen von Fragmenten hilfreich ist. "Check out replaceFragement ()". Unsere Klasse "BaseContainerFragment.java"

      import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.util.Log; import app.drugs.talksooner.R; public class BaseContainerFragment extends Fragment { public void replaceFragment(Fragment fragment, boolean addToBackStack) { FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); if (addToBackStack) { transaction.addToBackStack(null); } transaction.replace(R.id.container_framelayout, fragment); transaction.commit(); getChildFragmentManager().executePendingTransactions(); } public boolean popFragment() { Log.e("test", "pop fragment: " + getChildFragmentManager().getBackStackEntryCount()); boolean isPop = false; if (getChildFragmentManager().getBackStackEntryCount() > 0) { isPop = true; getChildFragmentManager().popBackStack(); } return isPop; } } 

    Schritt 3: Jetzt erwäge ich für ein Fragment, das nur hofft, dass die Ruhe von Ihnen in gleicher Weise behandelt werden kann. Container definieren Fragmentklasse. Jede Registerkarte hat einen speziellen Container. Sag TalkContainerFragment.java für den ersten Tab

      import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import app.drugs.talksooner.R; import app.drugs.talksooner.Talk; import app.drugs.talksooner.utils.BaseContainerFragment; public class TalkContainerFragment extends BaseContainerFragment { private boolean mIsViewInited; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.e("test", "tab 1 oncreateview"); return inflater.inflate(R.layout.container_fragment, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.e("test", "tab 1 container on activity created"); if (!mIsViewInited) { mIsViewInited = true; initView(); } } private void initView() { Log.e("test", "tab 1 init view"); replaceFragment(new Talk(), false); } } 

    Es ist XML-Datei. "Container_fragment.xml" enthält dieser xml-Container frameLayout. Wir werden diese ID verwenden, um verschiedene Fragmente zu ersetzen.

      <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container_framelayout" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> 

    Ihre Hauptklasse. "Talk.java"

      public class Talk extends Fragment { /** Define global variables over here */ //private ProgressDialog pDialog; StaticApiList sal; TalkModelAll tma; JSONObject myJasonObject = null; private ListView lv; private ArrayList<TalkModelAll> m_ArrayList = null; //ArrayList<String> stringArrayList = new ArrayList<String>(); TalkArrayAdapter taa; Set<String> uniqueValues = new HashSet<String>(); TextView rowTextView = null; boolean vivek = false; int postid; String title; String thumsrc; String largeimg; String excert; String description; String cat; String myUrl; String jsonString; int mCurCheckPosition; String check_state = null; String ccc; LinearLayout myLinearLayout; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.talk, container, false); Button btn = (Button) rootView.findViewById(R.id.your_btn_id); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //Here TalkDetail is name of class that needs to open TalkDetail fragment = new TalkDetail(); // if U need to pass some data Bundle bundle = new Bundle(); bundle.putString("title", m_ArrayList.get(arg2).title); bundle.putString("largeimg", m_ArrayList.get(arg2).largeimg); bundle.putString("excert", m_ArrayList.get(arg2).excert); bundle.putString("description", m_ArrayList.get(arg2).description); bundle.putString("cat", m_ArrayList.get(arg2).cat); //bundle.putInt("postid", m_ArrayList.get(arg2).postid); fragment.setArguments(bundle); ((BaseContainerFragment)getParentFragment()).replaceFragment(fragment, true); } }); return rootView; } } 

    Das ist es. Du bist startklar. Die ganze Magie liegt in der Berufung von R.id. Anstelle von R.layout. Prost!

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.