Wie kann ich einen Android Tabbed Dialog mit Fragmenten erstellen?

Kann jemand mich auf ein Beispiel zeigen oder mir zeigen, wie man einen einfachen Tabbed Dialog in Android erstellt, wo der Inhalt jeder Registerkarte Fragments ? Alle Beispiele / Tutorials, die ich gefunden habe, sind über Fragmente und Tabs, aber nichts Besonderes für DialogFragments .

Die Dokumentation für FragmentTabHost zeigt, wie man Tabs innerhalb normaler Fragmente mit getChildFragmentManager() . Ich gehe davon aus, dass dies auch funktionieren sollte, wenn das Fragment ein DialogFragment aber wenn ich es versuche, bekomme ich:

  • Nach dem Senden von Daten an den Server, wie man Antwort in der nächsten Aktivität zu drucken?
  • Fehler beim Synchronisieren von Gradle-Projekt
  • Spinner mit einer leeren Voreinstellung
  • Android java.exe beendet mit Nicht-Null-Exit-Wert 1
  • Wie kann ich die Spalte mit ORMLite aktualisieren?
  • EditText mit Einzeltextzeile, Zeilenumbruch und Done-Aktion?
  •  java.lang.IllegalStateException: Fragment does not have a view at android.support.v4.app.Fragment$1.findViewById(Fragment.java:1425) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:901) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) ... 

    Hier ist mein Code für die Einrichtung der Ansicht (die dann an AlertDialog.setView() ):

     private void setupView(View v) { mTabHost = (FragmentTabHost) v.findViewById(android.R.id.tabhost); mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent); mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab1"), MyDialogFragment.class, null); } 

  • Android: Lassen Sie Benutzer Bild oder Video aus der Galerie auswählen
  • <Use-permission android: name = "android.permission.SEND_SMS" />
  • Ändern der EditText-Unterzeilenfarbe mit appcompat v7
  • Android-Textansicht Farbe ändert sich nicht, wenn deaktiviert
  • Wie fügt man einen Steigung auf Buttons in Android durch xml?
  • "Service Discovery fehlgeschlagen" von Android Bluetooth Insecure Rfcomm
  • 4 Solutions collect form web for “Wie kann ich einen Android Tabbed Dialog mit Fragmenten erstellen?”

    Verbrachte viel Zeit, um es zu arbeiten, aber kein Glück. Die einzige Lösung, die ich gefunden habe, ist, Dummy-Fragment-Tabhost zu erstellen und Viewpager mit Fragmenten anstelle von Tabhost-Fragmenten zu verwenden

    Voters_dialog.xml

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" > <android.support.v4.app.FragmentTabHost android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tabs" > </android.support.v4.app.FragmentTabHost> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"/> </LinearLayout> 

    Dialog-Klasse, der Trick ist use onCreateView nicht onCreateDialog

     public class VotersDialog extends DialogFragment { private FragmentTabHost mTabHost; private ViewPager viewPager; private VotersPagerAdapter adapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.voters_dialog, container); getDialog().setTitle(getArguments().getString("title")); mTabHost = (FragmentTabHost) view.findViewById(R.id.tabs); mTabHost.setup(getActivity(), getChildFragmentManager()); mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Плюсов"), Fragment.class, null); mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Минусов"), Fragment.class, null); adapter = new VotersPagerAdapter(getChildFragmentManager(), getArguments()); adapter.setTitles(new String[]{"Плюсов", "Минусов"}); viewPager = (ViewPager)view.findViewById(R.id.pager); viewPager.setAdapter(adapter); viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i2) { } @Override public void onPageSelected(int i) { mTabHost.setCurrentTab(i); } @Override public void onPageScrollStateChanged(int i) { } }); mTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { @Override public void onTabChanged(String s) { int i = mTabHost.getCurrentTab(); viewPager.setCurrentItem(i); } }); return view; } public class VotersPagerAdapter extends FragmentPagerAdapter { Bundle bundle; String [] titles; public VotersPagerAdapter(FragmentManager fm) { super(fm); } public VotersPagerAdapter(FragmentManager fm, Bundle bundle) { super(fm); this.bundle = bundle; } @Override public Fragment getItem(int num) { Fragment fragment = new VotersListFragment(); Bundle args = new Bundle(); args.putSerializable("voters",bundle.getSerializable( num == 0 ? "pros" : "cons")); fragment.setArguments(args); return fragment; } @Override public int getCount() { return 2; } @Override public CharSequence getPageTitle(int position) { return titles[position]; } public void setTitles(String[] titles) { this.titles = titles; } } public static class VotersListFragment extends ListFragment { List<String> voters; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.list_fragment, container, false); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); voters = (ArrayList) getArguments().getSerializable("voters"); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, voters); setListAdapter(adapter); getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Intent intent = new Intent(getActivity(), ProfileActivity_.class); String login = voters.get(i); intent.putExtra("login", Utils.encodeString(login.substring(0, login.indexOf("(")).trim())); startActivity(intent); } }); } } } 

    Hier ist Ergebnis, jetzt können Sie Tabs drücken oder Fragmente ausrollen

    Bildbeschreibung hier eingeben

    Ich suchte nach der gleichen Lösung, aber nichts hat für mich geklappt, also habe ich meinen eigenen Android Tabbed Dialog mit Fragmenten gebaut. Vielleicht könnte es jemandem helfen.

    Sie können hier den kompletten Quellcode auschecken

    Sie sollten ein DialogFragment , TabLayout und ViewPager . Zum Beispiel kann die Ansicht des Dialogfragments so aussehen:

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.TabLayout android:id="@+id/tabLayout" android:layout_width="match_parent" android:layout_height="wrap_content" /> <android.support.v4.view.ViewPager android:id="@+id/masterViewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 

    Erstellen Sie Ihren Adapter und stellen Sie sicher, dass Sie das getPageTitleMethod überschreiben, zB:

     public class CustomAdapter extends FragmentPagerAdapter { List<Fragment> mFragmentCollection = new ArrayList<>(); List<String> mTitleCollection = new ArrayList<>(); public CustomAdapter(FragmentManager fm) { super(fm); } public void addFragment(String title, Fragment fragment) { mTitleCollection.add(title); mFragmentCollection.add(fragment); } //Needed for @Override public CharSequence getPageTitle(int position) { return mTitleCollection.get(position); } @Override public Fragment getItem(int position) { return mFragmentCollection.get(position); } @Override public int getCount() { return mFragmentCollection.size(); } } 

    Im OnCreateView Ihres Dialogs sollten Sie Ihren Viewpager mit dem TabLayout einrichten:

      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootview = inflater.inflate(R.layout.dialog_sample,container,false); tabLayout = (TabLayout) rootview.findViewById(R.id.tabLayout); viewPager = (ViewPager) rootview.findViewById(R.id.masterViewPager); CustomAdapter adapter = new CustomAdapter(getChildFragmentManager()); adapter.addFragment("Boy",CustomFragment.createInstance("John")); adapter.addFragment("Girl",CustomFragment.createInstance("Stacy")); adapter.addFragment("Robot",CustomFragment.createInstance("Aeon")); viewPager.setAdapter(adapter); tabLayout.setupWithViewPager(viewPager); return rootview; } 

    Ich habe hier einen Blogpfosten geschrieben: hier .

    Versuchen Sie es mit DialogFragment stattdessen und auf Ihrem dialogfragment-Layout ein LinearLayout für fragmentTransaction.

     FragmentTransaction t = getSupportFragmentManager().beginTransaction(); String Tag = fragment.getClass().getSimpleName(); t.replace(R.id.llTabFragmentContainer, fragment, Tag); t.commit(); 

    Fragment ist dein Tab-Fragment. Cheeers

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