在ListView上方添加布局

时间:2015-09-01 23:45:15

标签: android android-layout android-fragments android-activity android-xml

我目前有一个ListView设置,其中填充了我网站上的JSON数据。我想在ListView上面添加一个布局,但仍然可以使用 ListView滚动

这是我当前的ListView布局(listview_layout.xml):

<LinearLayout
    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">

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:dividerHeight="0dp"
        android:divider="@null" />

</LinearLayout>

以下是片段中的onCreateView()方法,它将JSON数据加载到适配器中,然后加载到ListView中:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.listview_layout, container, false);
    final ListView listView = (ListView) view.findViewById(R.id.listview);

    final ArrayList<User> userArray = new ArrayList<User>();

    final RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(URL).build();

    final ApiEndpointInterface apiService = restAdapter.create(ApiEndpointInterface.class);

    apiService.getUsers(new Callback<UserData>() {

        @Override
        public void success(UserData userData, Response response) {
            final UserAdapter adapter = new UserAdapter(getActivity(), userArray);
            userArray.addAll(userData.getData());
            listView.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }

        @Override
        public void failure(RetrofitError retrofitError) {
            retrofitError.printStackTrace();
        }
    });

    return view;
}

这是我想要在ListView上面的布局:

<LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_marginBottom="30dp">

    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/ic_user"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop"
        android:layout_gravity="center_vertical" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="User"
        android:textSize="18sp"
        android:layout_gravity="center_vertical" />

</LinearLayout>

如何在ListView上方添加此布局,并使用ListView滚动(不是粘贴/固定布局)?

为了说明,这就是我需要的。请注意,滚动条(红色)在整个屏幕上,而不仅仅是ListView:

http://i.imgur.com/NRaKJmx.png

3 个答案:

答案 0 :(得分:0)

您可以创建具有不同布局的ListView,只需在列表顶部添加标题布局即可。

http://www.survivingwithandroid.com/2014/08/android-listview-with-multiple-row.html

这似乎有一个很好的指导。

答案 1 :(得分:0)

以下是另一个建议:

使用include标记,将您的布局包含在listview_layout.xml中:

<LinearLayout
    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"
    orientation="vertical">

    <include layout="@layout/title_header_layout"></include>
    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:dividerHeight="0dp"
        android:divider="@null" />

</LinearLayout>

您还可以使用RelativeLayout而不是LinearLayout来减少View层次结构的深度。

下面还有一些注意事项:

  1. 确保将ListView的layout_height属性设置为match_parent
  2. 设置LinearLayout的orientation标记。

答案 2 :(得分:0)

还有一个建议。您可以将标题视图作为列表视图中视图的一部分添加为列表视图中的第一个元素,方法是将其作为自定义列表视图。

前 -

LinearLayout.setAdapter(new CustomAdapter());
class CustomAdapter(
 public view getview(){
}
}

我已经做过这样的事情,用于在列表视图之上显示广告。