【问题标题】:Add layout above ListView [duplicate]在 ListView 上方添加布局 [重复]
【发布时间】:2015-09-01 23:45:15
【问题描述】:

我目前有一个 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:

【问题讨论】:

  • 添加布局作为listview的headerview

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    这是另一个建议:

    使用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 标签。

    【讨论】:

    • 这没有得到想要的效果。只有 ListView 是可滚动的,而不是整个屏幕。
    • @George 抱歉,我没看到。在这种情况下,在您的适配器中,您将必须支持两种不同的视图类型。您可以通过覆盖 Adapter.getItemViewTypeCount(返回 2)来实现这一点,在 Adapter.getView 中,您将根据位置膨胀正确的项目布局(标题与实际项目)。
    【解决方案3】:

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

    例如-

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

    我已经为在列表视图顶部显示广告视图做了这种事情。

    【讨论】:

    • 你能解释更多吗?
    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 2021-01-06
    相关资源
    最近更新 更多