2017-12-26 35 views
2

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; 
} 
+0

Können Sie Ihr Fehlerprotokoll teilen? – R2R

+0

E/AndroidRuntime: FATALE AUSNAHME: Haupt Prozess: com.example.yoyo.bonosconsulta, PID: 28495 java.lang.IllegalStateException: Fragment hat keine Ansicht –

Antwort

0

es könnte viel einfacher sein, wenn Sie es in einer normalen Aktivität umzusetzen, und geben Sie Ihre Aktivität ein Thema wie Theme.AppCompat.Light.Dialog

+0

Wenn Sie die Erstellung des Alertdialog innerhalb einer Aktivität, habe ich gerade versucht das (in MainActivity. Derselbe Fehlercode. –

Verwandte Themen