2016-04-12 7 views
7

Ich versuche, eine viewpager in einem BottomSheetDialogFragment zu setzen, sondern immer mit dem gleichen Ergebnis:ViewPager innen BottomSheetDialogFragment

java.lang.IllegalStateException: Fragment keinen Blick

setupDialog

Code:

@Override 
public void setupDialog(Dialog dialog, int style) { 
    Log.d(TAG, "setupDialog"); 
    super.setupDialog(dialog, style); 

    View root = View.inflate(getContext(), R.layout.fragment_daily_detail, null); 
    dialog.setContentView(root); 
    CoordinatorLayout.LayoutParams layoutParams = 
      (CoordinatorLayout.LayoutParams) ((View) root.getParent()).getLayoutParams(); 
    CoordinatorLayout.Behavior behavior = layoutParams.getBehavior(); 

    if (behavior != null && behavior instanceof BottomSheetBehavior) { 
     bottomSheetBehavior = (BottomSheetBehavior) behavior; 
     bottomSheetBehavior.setBottomSheetCallback(mBottomSheetBehaviorCallback); 
     bottomSheetBehavior.setPeekHeight((int) getResources().getDimension(R.dimen.fragment_forgot_password_min_height)); 
     Log.d(TAG, "State: " + bottomSheetBehavior.getState()); 

     imageClose = root.findViewById(R.id.imageViewClose); 
     textViewTitle = (TextView) root.findViewById(R.id.textViewTitle); 
     peekLayout = root.findViewById(R.id.peekLayout); 
     tabLayout = (TabLayout) root.findViewById(R.id.tabs); 
     viewPager = (ViewPager) root.findViewById(R.id.viewPager); 

     recyclerView = (RecyclerView) root.findViewById(R.id.recyclerView); 

     timesheetDay = timesheetDayList.get(pageNumber); 

     imageClose.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); 
      } 
     }); 
     textViewTitle.setText(timesheetDay.getDate()); 

     sectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager()); 
     viewPager.setAdapter(sectionsPagerAdapter); 
     tabLayout.setupWithViewPager(viewPager); 
    } 
} 

FragmentPagerAdapter

Code:

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return PageFragment.getInstance(timesheetDayList.get(position)); 
    } 

    @Override 
    public int getCount() { 
     return timesheetDayList.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return timesheetDayList.get(position).getDate(); 
    } 
} 

LAYOUT Code:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/mainLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/background_material_light" 
android:clickable="true" 
android:orientation="vertical" 
tools:context=".ui.dialogs.bottomsheets.ForgotUsernameFragment"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="0dp" 
    android:layout_marginTop="0dp"> 

    <RelativeLayout 
     android:id="@+id/peekLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:id="@+id/linearLayout2" 
      android:layout_width="match_parent" 
      android:layout_height="?actionBarSize" 
      android:background="@color/colorPrimary" 
      android:gravity="center_vertical" 
      android:orientation="horizontal"> 

      <ImageView 
       android:id="@+id/imageViewClose" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="?attr/selectableItemBackgroundBorderless" 
       android:clickable="true" 
       android:padding="16dp" 
       app:srcCompat="@drawable/ic_close_white_24dp" 
       tools:ignore="MissingPrefix" 
       tools:src="@drawable/ic_close_white_24dp" /> 

      <TextView 
       android:id="@+id/textViewTitle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Daily Detail" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:textColor="@color/colorWhite" /> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/linearLayout2" 
      android:orientation="vertical"> 

      <android.support.design.widget.TabLayout 
       android:id="@+id/tabs" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@color/colorPrimary" 
       app:tabMode="scrollable" /> 

      <android.support.v4.view.ViewPager 
       android:id="@+id/viewPager" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"/> 
     </LinearLayout> 

    </RelativeLayout> 
</RelativeLayout> 

Es wäre für mich sehr nützlich sein, wenn jemand etwas über diese impl weiß Emulation.

Prost und vielen Dank im Voraus!

+0

Kann ich 'SectionsPagerAdapter' sehen? – pRaNaY

Antwort

7

AKTUALISIERT

ich das Problem, das Aufblasen der Ansicht in "onCreateView()" gelöst. Wie auch immer, ich habe einen RecyclerView im ViewPager installiert und der RecyclerView vertikale Scroll ist sehr instabil, funktioniert manchmal und manchmal nicht, also werde ich versuchen, diesen Bildschirm auf andere Weise zu machen.

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    Log.d(TAG, "onCreateview"); 

    View root = inflater.inflate(R.layout.fragment_daily_detail, container); 

    mImageClose = root.findViewById(R.id.imageViewClose); 
    mTextViewTitle = (TextView) root.findViewById(R.id.textViewTitle); 
    mPeekLayout = root.findViewById(R.id.peekLayout); 
    mTabLayout = (TabLayout) root.findViewById(R.id.tabs); 
    mViewPager = (ViewPager) root.findViewById(R.id.viewPager); 

    mImageClose.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getDialog().dismiss(); 
     } 
    }); 

    mTextViewTitle.setText("Daily detail"); 

    mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager()); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
    mTabLayout.setupWithViewPager(mViewPager); 

    mViewPager.setCurrentItem(mPageNumber); 

    mPeekLayout.getViewTreeObserver().addOnGlobalLayoutListener(
      new ViewTreeObserver.OnGlobalLayoutListener() { 

       @Override 
       public void onGlobalLayout() { 

        BottomSheetDialog dialog = (BottomSheetDialog) getDialog(); 

        FrameLayout bottomSheet = (FrameLayout) dialog.findViewById(android.support.design.R.id.design_bottom_sheet); 
        mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet); 

        // gets called after layout has been done but before display 
        // so we can get the height then hide the view 
        int height = mPeekLayout.getHeight(); 
        Log.d(TAG, "Height: " + height); 
        mBottomSheetBehavior.setPeekHeight(height); 
        mBottomSheetBehavior.setBottomSheetCallback(mBottomSheetBehaviorCallback); 
       } 
      }); 

    return root; 
} 
+0

Ehrfürchtig. Es rettet meinen Tag :) –

1

Versuchen Sie den Code zu ändern, wie unten:

... 
LayoutInflater inflater = getActivity().getLayoutInflater(); 
root = inflater.inflate(R.layout.fragment_daily_detail, null); 
... 
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 
//Use getSupportFragmentManager() instead of getChildFragmentManager(), 
... 
+0

Das gleiche Ergebnis :(Aber danke trotzdem – Buntupana

+0

sehe meinen bearbeiteten Code. Es hilft Ihnen. – pRaNaY

+0

gibt es keine getSupportFragmentManager() in BottomSheetDialogFragment, nur getFragmentManager(). Ich habe es bereits versucht. Das Ergebnis war java.lang.IllegalArgumentException: Nein View gefunden für ID 0x7f0e010e Ich denke, um ein Fragment innerhalb eines anderen Fragments zu setzen, sollte ich getChildFragmentManager() verwenden, oder? – Buntupana