【问题标题】:Android Custom list view with too much space between itemsAndroid自定义列表视图,项目之间的空间太大
【发布时间】:2017-08-04 00:25:44
【问题描述】:

我正在将一些数据从 mysql 数据库检索到一个列表视图中,但它看起来每次都会为我在数据库中的每个项目生成一个新的列表视图,因此它使列表视图项目之间有太多空间。任何帮助都会非常感激! :D 我试图通过将其设置为 match_parent 来修复布局,但它们都不起作用。

first

second

原始布局:

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/background"
        android:weightSum="1">

        <ImageView
            android:id="@+id/logoImageView"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="17dp"
            android:layout_weight="0.07"
            android:adjustViewBounds="true"
            android:scaleType="fitCenter"
            app:srcCompat="@drawable/logo" />

        <TextView
            android:id="@+id/titletextview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/logoImageView"
            android:layout_marginLeft="33dp"
            android:layout_toEndOf="@+id/logoImageView"
            android:text="Title"
            android:textColor="@android:color/background_light"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/descriptiontextview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="33dp"
            android:text="Description"
            android:textColor="@android:color/background_light"
            android:textSize="17sp"
            android:layout_below="@+id/titletextview"
            android:layout_centerHorizontal="true" />

        <TextView
            android:id="@+id/startdateTextview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="33dp"
            android:text="Start Date"
            android:textColor="@android:color/background_light"
            android:textSize="14sp"
            android:layout_alignBottom="@+id/logoImageView"
            android:layout_toEndOf="@+id/logoImageView" />

        <TextView
            android:id="@+id/enddatetextview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="33dp"
            android:layout_marginStart="28dp"
            android:text="End Date"
            android:textColor="@android:color/background_light"
            android:textSize="14sp"
            android:layout_alignBottom="@+id/logoImageView"
            android:layout_toEndOf="@+id/startdateTextview" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="33dp"
            android:background="@drawable/trash"
            android:layout_alignBaseline="@+id/descriptiontextview"
            android:layout_alignBottom="@+id/descriptiontextview"
            android:layout_toEndOf="@+id/enddatetextview" />

    </RelativeLayout>

自定义布局:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:weightSum="1">

    <ImageView
        android:id="@+id/logoImageView"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="17dp"
        android:layout_weight="0.07"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        app:srcCompat="@drawable/logo" />

    <TextView
        android:id="@+id/titletextview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/logoImageView"
        android:layout_marginLeft="33dp"
        android:layout_toEndOf="@+id/logoImageView"
        android:text="Title"
        android:textColor="@android:color/background_light"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/descriptiontextview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="33dp"
        android:text="Description"
        android:textColor="@android:color/background_light"
        android:textSize="17sp"
        android:layout_below="@+id/titletextview"
        android:layout_centerHorizontal="true" />

    <TextView
        android:id="@+id/startdateTextview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="33dp"
        android:text="Start Date"
        android:textColor="@android:color/background_light"
        android:textSize="14sp"
        android:layout_alignBottom="@+id/logoImageView"
        android:layout_toEndOf="@+id/logoImageView" />

    <TextView
        android:id="@+id/enddatetextview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="33dp"
        android:layout_marginStart="28dp"
        android:text="End Date"
        android:textColor="@android:color/background_light"
        android:textSize="14sp"
        android:layout_alignBottom="@+id/logoImageView"
        android:layout_toEndOf="@+id/startdateTextview" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="33dp"
        android:background="@drawable/trash"
        android:layout_alignBaseline="@+id/descriptiontextview"
        android:layout_alignBottom="@+id/descriptiontextview"
        android:layout_toEndOf="@+id/enddatetextview" />

</RelativeLayout>

我的 BaseAdapter 类:

import android.content.Context;
import android.database.DataSetObserver;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.alex.bookingapplication.CompanyData;
import com.example.alex.bookingapplication.R;

import java.util.ArrayList;

/**
 * Created by AlexPC on 8/3/2017.
 */

public class CustomAdapter extends BaseAdapter {
    Context c;
    ArrayList<CompanyData> informations = new ArrayList<>();
    LayoutInflater inflater;

    public CustomAdapter(Context c, ArrayList<CompanyData> informations) {
        this.c = c;
        this.informations = informations;
        inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public CustomAdapter() {
        super();
    }

    @Override
    public int getCount() {
        return informations.size();
    }

    @Override
    public Object getItem(int i) {
        return informations.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if(view == null) {
            view = inflater.inflate(R.layout.yourservicescustomlayout, null);
        }

            // ImageView logo = (ImageView)view.findViewById(R.id.logoImageView);
            TextView title = (TextView) view.findViewById(R.id.titletextview);
            TextView description = (TextView) view.findViewById(R.id.descriptiontextview);
            TextView startDate = (TextView) view.findViewById(R.id.startdateTextview);
            TextView endDate = (TextView) view.findViewById(R.id.enddatetextview);

            CompanyData companyData = informations.get(i);

            title.setText(companyData.getTitle());
            description.setText(companyData.getDescription());
            startDate.setText(companyData.getStartDate());
            endDate.setText(companyData.getEndDate());

        return view;

    }

    @Override
    public CharSequence[] getAutofillOptions() {
        return new CharSequence[0];
    }
}

【问题讨论】:

  • 添加你的布局 xml
  • 向您发布 xml 设计,您已经尝试过什么
  • 请提供更多描述,您的布局 xml 文件,以及如何将数据放入适配器中,请
  • 我已经发布了我的 XML 文件:D
  • 添加整个而不只是内部小部件

标签: android layout


【解决方案1】:

您使用的是列表适配器吗? 如果你是(你可能应该是,它们工作得很好)那么你可以只更新适配器上的对象列表,然后更新。如下

adapter.clear();
adapter.notifyDataSetChanged();

ListAdapter Documentation

Adapter Documentation

【讨论】:

  • 抱歉,这些信息不足以引导您朝着正确的方向@Oussema。尝试浏览文档。
  • 你必须向他询问更多细节,而不是在不知道问题的情况下登陆答案