2017-12-26 43 views
2

タブ付きViewPagerを使用してカスタムAlertDialogを作成することができません。 onCreateViewでDialogFragmentを作成することができました。しかし、AlertDialogに変更しようとすると、onCreateDialogメソッドにコードを適用しようとしましたが、多くの試行の後に失敗しました。AlertDialog内のタブ付きビューページャ

私が手にエラーがある:

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.yoyo.bonosconsulta, PID: 28495 
       java.lang.IllegalStateException: Fragment does not have a view 

代わりdialog_viewpager.xmlとの見解を膨張させる、私はfragment_date.xmlでそれを膨らませる(そして次のコード7行を削除)した場合、それはしていません何か誤りがある。ですから、問題はビューページャーまたはタブレイアウトにあると思います。

ご協力いただければ幸いです。ここで

は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(); 
} 

はここ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" 
    /> 

です。ここ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(); 
} 

}

そして最後にfragment_date.xml(fragment_time.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"> 
<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" 
    /> 

、私はonCreateViewを持っていたとき()、それは(働いたがAlertDialogボタンなしで、コードがしましたこの:

@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

エラーログを共有できますか? – R2R

+0

E/AndroidRuntime:致命的な例外:メイン プロセス:com.example.yoyo.bonosconsulta、PID:28495 java.lang.IllegalStateException:フラグメントにビューがありません –

答えて

0

あなたの通常の活動でそれを実装し、Theme.AppCompat.Light.Dialog

のようなあなたの活動テーマを与えれば多くの方が簡単かもしれません
+0

アクティビティ内にalertdialogを作成することを意味する場合は、その(MainActivityで、同じエラーコード。 –

関連する問題