Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


BottomSheetDialogFragment – ¿Cómo enrollar contenido y mostrarlo completamente?

Así que con la versión v23.2 de la biblioteca de soporte de AppCompat, decidí hacer uso de BottomSheetDialogFragment. He estado intentando abrir la hoja inferior cuando hago clic en un elemento en un listview (conectado con el adaptador, por lo que representa un cursor). Cuando se hace clic en, paso la ID del cursor al DialogFragment y vuelva a consultar el proveedor de contenido para rellenar la hoja inferior.

Todo esto parece funcionar bien, el problema ahora es que cuando se abre la hoja inferior, sólo veo la parte superior de TextView, mientras que me gustaría que mostrar el diseño completo que se pasa a la hoja inferior.

Esto es lo que tengo ahora:

1) En el fragmento que contiene el ListView, para abrir el cuadro de diálogo de hoja inferior:

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int clickedPersonId = ((Cursor) mListView.getItemAtPosition(position)).getInt(FriendsFragment.COL_PERSONS_ID); Log.v("FriendsFragment", "Clicked person with personid = " + clickedPersonId); PersonBottomSheetFragment personBSDF = PersonBottomSheetFragment.newInstance(clickedPersonId); personBSDF.show(getFragmentManager(), "BOTTOM_SHEET_PERSON"); } }); 

2) fragment_person_bottom_sheet.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragment_person_content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/fragment_person_username" android:layout_width="match_parent" android:layout_height="wrap_content" android:drawableLeft="@drawable/ic_account_circle_white_36" android:drawablePadding="10dp" android:drawableStart="@drawable/ic_account_circle_white_36" android:gravity="center_vertical" android:text="Username" android:textAllCaps="false" android:textSize="18sp" /> <TextView android:id="@+id/fragment_person_personname" android:layout_width="match_parent" android:layout_height="wrap_content" android:drawableLeft="@drawable/ic_account_circle_white_36" android:drawablePadding="10dp" android:drawableStart="@drawable/ic_account_circle_white_36" android:gravity="center_vertical" android:text="Person name" android:textAllCaps="false" android:textSize="18sp" /> <TextView android:id="@+id/fragment_person_dob" android:layout_width="match_parent" android:layout_height="wrap_content" android:drawableLeft="@drawable/ic_account_circle_white_36" android:drawablePadding="10dp" android:drawableStart="@drawable/ic_account_circle_white_36" android:gravity="center_vertical" android:text="Date of birth" android:textAllCaps="false" android:textSize="18sp" /> <TextView android:id="@+id/fragment_person_location_country" android:layout_width="match_parent" android:layout_height="wrap_content" android:drawableLeft="@drawable/ic_account_circle_white_36" android:drawablePadding="10dp" android:drawableStart="@drawable/ic_account_circle_white_36" android:gravity="center_vertical" android:text="Country" android:textAllCaps="false" android:textSize="18sp" /> </LinearLayout> 

Así que básicamente sólo veo el primer TextView, para ver el resto el usuario ahora tiene que arrastrar la hoja inferior más arriba. (Aunque el LinearLayout tiene wrap_content para la altura establecida.)

3) PersonBottomSheetFragment.java

 public class PersonBottomSheetFragment extends BottomSheetDialogFragment implements LoaderManager.LoaderCallbacks<Cursor> { public final int PERSONBOTTOMSHEETFRAGMENT_LOADER = 18567; // TODO TextView usernameView; TextView personnameView; TextView dobView; TextView locationCountryView; public PersonBottomSheetFragment() { ; } public static PersonBottomSheetFragment newInstance(int personid) { PersonBottomSheetFragment frag = new PersonBottomSheetFragment(); Bundle argsBundle = new Bundle(); argsBundle.putInt("personid", personid); frag.setArguments(argsBundle); return frag; } @Override public void setArguments(Bundle args) { super.setArguments(args); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_person_bottom_sheet, null); usernameView = (TextView) view.findViewById(R.id.fragment_person_username); personnameView = (TextView) view.findViewById(R.id.fragment_person_personname); dobView = (TextView) view.findViewById(R.id.fragment_person_dob); locationCountryView = (TextView) view.findViewById(R.id.fragment_person_location_country); getLoaderManager().initLoader(PERSONBOTTOMSHEETFRAGMENT_LOADER, null, this); return view; } @Override public Loader<Cursor> onCreateLoader(int i, Bundle bundle) { Uri personsWithIDUri = DataContract.PersonsEntry.buildPersonsUri(getArguments().getInt("personid")); return new CursorLoader(getActivity(), personsWithIDUri, UserFragment.PERSONFRAGMENT_COLUMNS, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { if (data == null || !data.moveToFirst()) { // null or empty cursor return; } usernameView.setText(data.getString(UserFragment.COL_PERSONS_USERNAME)); personnameView.setText(data.getString(UserFragment.COL_PERSONS_PERSONNAME)); dobView.setText(data.getString(UserFragment.COL_PERSONS_DOB)); locationCountryView.setText(data.getString(UserFragment.COL_PERSONS_LOCATION_COUNTRY)); } @Override public void onLoaderReset(Loader<Cursor> loader) { } } 

  • Selector de Android Drawable con VectorDrawables srcCompat
  • Vector Drawable no se puede cargar correctamente en Android API 19 con la ayuda de Support Library (23.4.0)
  • CoordinatorLayout NullPointerException en onTouchEvent
  • Proguard - AppCompat no admite las características del tema actual después de proguard / minify
  • Cómo configurar la frontera de color en cardview
  • No encontró la clase "android.support.v7.internal.widget.TintManager" en la ruta: DexPathList
  • ¿Cómo crear la barra de herramientas con el botón personalizado a la izquierda?
  • Excepción grave: java.lang.NoClassDefFoundError: android.support.v7.app.AppCompatDelegateImplV23
  • One Solution collect form web for “BottomSheetDialogFragment – ¿Cómo enrollar contenido y mostrarlo completamente?”

    No debe implementar onCreateView y onCreateDialog al mismo tiempo ( onCreateDialog es implementado por BottomSheetDialogFragment ).

    En su lugar, intente hacerlo:

     @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState); View view = inflater.inflate(R.layout.fragment_person_bottom_sheet, null); usernameView = (TextView) view.findViewById(R.id.fragment_person_username); personnameView = (TextView) view.findViewById(R.id.fragment_person_personname); dobView = (TextView) view.findViewById(R.id.fragment_person_dob); locationCountryView = (TextView) view.findViewById(R.id.fragment_person_location_country); getLoaderManager().initLoader(PERSONBOTTOMSHEETFRAGMENT_LOADER, null, this); dialog.setContentView(view); return dialog; } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.