Ich kann keinen Custom AlertDialog mit einem Tabbed ViewPager darin erstellen. Ich konnte damit in OnCreateView ein DialogFragment erstellen. Aber als ich versuchte, es in einen AlertDialog zu ändern, habe ich den Code an die onCreateDialog-Methode angepasst (versucht), war aber nach vielen Versuchen nicht erfolgreich.Tabbed Viewpager innerhalb von AlertDialog
Der Fehler, den ich bekommen ist:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.yoyo.bonosconsulta, PID: 28495
java.lang.IllegalStateException: Fragment does not have a view
Wenn stattdessen die Ansicht mit dialog_viewpager.xml aufzublasen, ich habe es mit fragment_date.xml aufblasen (und die folgenden 7 Zeilen Code entfernen), es nicht Gib irgendeinen Fehler. Das Problem liegt also entweder im Viewpager oder im Tablayout, denke ich.
Jede Hilfe würde sehr geschätzt werden.
Hier ist der onCreateView:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
((MainActivity) getActivity())
.doPositiveClick();
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
((MainActivity) getActivity())
.doNegativeClick();
}
});
LayoutInflater i = getActivity().getLayoutInflater();
View rootview = i.inflate(R.layout.dialog_viewpager,null);
tabLayout = rootview.findViewById(R.id.tabLayout);
viewPager = rootview.findViewById(R.id.masterViewPager);
TabbedDialogAdapter adapter = new TabbedDialogAdapter(getChildFragmentManager());
adapter.addFragment("Date", TabbedDateFragment.createInstance("John"));
adapter.addFragment("Time", TabbedTimeFragment.createInstance("Stacy"));
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
builder.setView(rootview);
return builder.create();
}
Hier dialog_viewpager.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<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="wrap_content"
/>
hier TabbedDialogAdapter:
public class TabbedDialogAdapter extends FragmentPagerAdapter {
List<Fragment> mFragmentCollection = new ArrayList<>();
List<String> mTitleCollection = new ArrayList<>();
public TabbedDialogAdapter(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();
}
}
Und schließlich fragment_date.xml (fragment_time.xml ähnlich ist)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<DatePicker
android:id="@+id/dp_datepicker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:layout_gravity="center"
android:background="@color/LVcolor"
/>
Zum Vervollständigung Zweck, als ich die onCreateView hatte() und es funktionierte (aber ohne die Tasten Alertdialog, war der Code dies:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootview = inflater.inflate(R.layout.dialog_viewpager,container,false);
tabLayout = rootview.findViewById(R.id.tabLayout);
viewPager = rootview.findViewById(R.id.masterViewPager);
TabbedDialogAdapter adapter = new TabbedDialogAdapter(getChildFragmentManager());
adapter.addFragment("Date", TabbedDateFragment.createInstance("John"));
adapter.addFragment("Time", TabbedTimeFragment.createInstance("Stacy"));
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
return rootview;
}
Können Sie Ihr Fehlerprotokoll teilen? – R2R
E/AndroidRuntime: FATALE AUSNAHME: Haupt Prozess: com.example.yoyo.bonosconsulta, PID: 28495 java.lang.IllegalStateException: Fragment hat keine Ansicht –