Android listview не отображается в нижней таблице

#android #listview #bottom-sheet

#Android #listview #нижняя таблица

Вопрос:

Я хочу создать навигационный нижний лист, подобный тому, что есть в навигационном нижнем листе Google Maps, где у нас есть список направлений для маршрута. Я использую Android BottomSheetBehaviour, чтобы открыть bottomsheet. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что listview не отображается внутри макета нижнего листа, когда он появляется. Представление просто пустое. Я также попытался раздуть view внутри NestedScrollView, чтобы получить тот же результат, но это тоже не появилось.

Это мой XML-файл нижней таблицы

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@ id/bottomSheet1"
android:orientation="vertical"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:elevation="4dp"
android:background="@color/white"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
android:clipToPadding="true"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:text="This is a sheet with listview."
    android:textSize="20dp"
    android:layout_marginTop="10dp"
    android:textColor="@color/primaryText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<TextView
    android:text="This is a secondary text!"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<android.support.v4.widget.NestedScrollView
    android:visibility="gone"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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


    </LinearLayout>

</android.support.v4.widget.NestedScrollView>

<ListView
    android:id="@ id/bottomSheetListview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

</LinearLayout>
  

И в моем Java-коде,

 View bottomSheetView = findViewById(R.id.bottomSheet1);
ListView listView = (ListView) findViewById(R.id.bottomSheetListview);
List<String> listData = getListData(); //returns a simple array list of strings, about 15 items
listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listData));
mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheetView);
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
  

Я делаю здесь что-то не так? Почему не отображается litview или scrollview.

введите описание изображения здесь

Отредактировал всю мою деятельность

     public class BottomSheetActivity extends AppCompatActivity {

        private static final String TAG = "==> BottomSheetActivity";

        BottomSheetBehavior mBottomSheetBehavior;
        Button peek;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_bottom_sheet);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            this.peek = (Button) findViewById(R.id.peek);

            peek.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    showSheet1();
                }
            });

        }

        private List<String> getListData(){
            List<String> stringList = new ArrayList<>();
            for (int i = 0; i < 15; i  ) {
                stringList.add("This is string number " i);
            }

            return stringList;
        }

        private void showSheet1(){
            if(mBottomSheetBehavior != null){
                //hide any previous bottom sheets
                mBottomSheetBehavior.setHideable(true);
                mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
            }
            //initialize a new sheet
            View bottomSheetView = findViewById(R.id.bottomSheet1);

            ListView listView = (ListView) bottomSheetView.findViewById(R.id.bottomSheetListview);
            listView.setVisibility(View.VISIBLE);
            List<String> listData = getListData();
            listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listData));

            mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheetView);
            mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
        }


    }
  

activity_bottom_sheet.xml

 <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.vedamic.androidtutorial.BottomSheetActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@ id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_bottom_sheet" />


    <android.support.design.widget.FloatingActionButton
        android:id="@ id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />

    <include layout="@layout/layout_bottom_sheet_1" />

</android.support.design.widget.CoordinatorLayout>
  

content_bottom_shee.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.vedamic.androidtutorial.BottomSheetActivity"
    tools:showIn="@layout/activity_bottom_sheet">

    <Button
        android:id="@ id/peek"
        android:text="peek 1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@ id/expand"
        android:text="peek 2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@ id/flipboardSheet"
        android:text="Flipbard BottomSheets"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ListView
        android:id="@ id/testListView"
        android:visibility="gone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>
  

Комментарии:

1. Может быть, это потому, что ваш NestedScrollView имеет layout_height=»match_parent» ?

2. Я попытался установить видимость NestedScrollView на ПРОПАВШУЮ и повторно запустил приложение, результаты все те же.

Ответ №1:

Я импортировал ваш xml, и «Предварительный просмотр» Android studios действительно показал, что NestedScrollView with android:layout_height="match_parent" занимает все пространство, поэтому ListView у него не осталось свободного места.

введите описание изображения здесь

При установке NestedScrollView в android:visibility="gone" значение ListView достаточно места.

введите описание изображения здесь

Итак, единственная причина, по которой сейчас ничего не отображается, может быть, потому, что ваш listData пустой?

Редактировать

Хорошо, я реализовал всю информацию, и стиль очень грязный. Прежде всего, кнопка peek 1 находится за панелью инструментов.

введите описание изображения здесь

Но я все равно могу щелкнуть по нему, так что это происходит:

введите описание изображения здесь

Комментарии:

1. Спасибо за усилия, но я отладил процесс, и мои данные списка показали 15 элементов, также getView() адаптера вызывался 15 раз. Проблема сохраняется. Есть еще идеи, как это могло произойти?

2. Не могли бы вы предоставить весь код класса Activity, в который вы добавляете нижний лист?

3. Я импортировал вашу активность и все XML-файлы, но это выглядит совершенно беспорядочно … (см. Мой обновленный ответ), но вид списка отображается .. каким-то образом

Ответ №2:

Сначала не делайте видимость вашего listview. Bottom должен знать, какого размера он должен быть. Если вам нужно сделать так, чтобы его видимость исчезла, сделайте это после создания нижнего листа.

И попробуйте в нижней таблице content_bottom_shee.xml родительское линейное описание

 android:fillViewport="true"