2016-05-17 6 views
1

Я хочу показать все элементы ArrayList<String> на ListView. Для этого я использую ArrayAdapter<String>. Проблема в том, что показан только первый элемент ('foo' в моем примере) ArrayList. Может кто-нибудь сказать мне, почему? Я что-то упускаю?ListView показывает только первый элемент

Я сделал минимальный пример, используя сгенерированный код (вкладками Action Bar Spinner Activity) из Android Studio 2.

Мои FooActivity:

public class FooActivity extends AppCompatActivity { 
... 

public static class PlaceholderFragment extends Fragment { 

    private ListView fooListView; 
    private ArrayAdapter<String> mAdapter; 
    ... 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_foo, container, false); 

     fooListView = (ListView) rootView.findViewById(R.id.foo_list); 
     updateList(); 
     return rootView; 
    } 

    private void updateList() { 
      ArrayList<String> strings = new ArrayList<>(); 
      strings.add("foo"); 
      strings.add("bar"); 

      if (mAdapter == null) { 
       mAdapter = new ArrayAdapter<>(getContext(), 
         R.layout.item_foo, 
         R.id.foo_string, 
         strings); 
       fooListView.setAdapter(mAdapter); 
      } else { 
       mAdapter.clear(); 
       mAdapter.addAll(strings); 
       mAdapter.notifyDataSetChanged(); 
      } 
    } 
} 

Мои fragment_foo.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.foo.activities.FooActivity$PlaceholderFragment"> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/foo_list" 
     android:layout_below="@+id/total_activities" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginTop="10dp" 
     android:layout_alignParentBottom="true" /> 
</RelativeLayout> 

И item_foo.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="match_parent"> 
    <TextView 
     android:id="@+id/foo_string" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="some_string" 
     android:textSize="20sp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 
</LinearLayout> 

Если это помогает, я могу публиковать созданные activity_foo.xml (я не внес никаких изменений) и полный класс FooActivity.

ответ

5

Проблема на самом деле была моя activity_foo.xml которая имела NestedScrollView. Я добавил android:fillViewport="true", и теперь он показывает каждый элемент.

Мой NestedScrollView теперь выглядит следующим образом:

<android.support.v4.widget.NestedScrollView 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    android:fillViewport="true"/> 
3

Если вы используете android:layout_height="wrap_content", вы увидите только один предмет. Попробуйте android:layout_height="match_parent". Если ListView занимает только часть макета, вам понадобятся LinearLayout с весами или RelativeLayout с ограничениями. Но wrap_content не будет работать на высоте на ListView, когда-либо.

0

Ваш ListView взгляд что-то вроде этого

<ListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/foo_list" 
    android:layout_marginTop="10dp"/> 

Я удален с вашего просмотра списка android:layout_below="@+id/total_activities"

и

android:layout_alignParentBottom="true" 
Смежные вопросы