android - ListView 没有膨胀

标签 android android-listview

大家好。

我目前正在开发一个自定义的 ListView,它不会在 Activity 中膨胀(不会变得可见)。

下面是 xml 和 ListView 适配器类。

主.xml

<LinearLayout 
    android:id="@+id/llListView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:paddingTop="2dp"
    android:paddingBottom="2dp"
    android:layout_below="@+id/rlFirstRow">

    <ListView 
        android:id="@+id/lvErrorsReport"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/border"/>

</LinearLayout>

listview_row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:id="@+id/llError"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_alignParentTop="true">

    <TextView
        android:id="@+id/txtErrorInfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textStyle="bold"
        android:textSize="20dp"/>

</LinearLayout>

    <LinearLayout
    android:id="@+id/llStatus"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_below="@+id/llError">

    <TextView
        android:id="@+id/txtStatus"
        android:layout_width="100dp" 
        android:layout_height="wrap_content"
        android:text="Status: "/>

    <TextView
        android:id="@+id/txtStatusInfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textStyle="italic"/>

</LinearLayout>

   <LinearLayout
    android:id="@+id/llMaterials"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_below="@+id/llStatus">

    <TextView
        android:id="@+id/txtMaterials"
        android:layout_width="100dp" 
        android:layout_height="wrap_content"
        android:text="Materials: "/>

    <TextView
        android:id="@+id/txtMaterialsInfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textStyle="italic"/>

</LinearLayout>

   <LinearLayout
   android:id="@+id/llButton"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:orientation="horizontal"
   android:layout_below="@+id/llMaterials">

   <Button 
       android:id="@+id/btnShowMaterials"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Show Materials"
       android:visibility="gone"/>
   </LinearLayout>

</RelativeLayout>

基础适配器类

public class RepairReportListViewAdapter extends BaseAdapter 
{
ArrayList<String> errors;
ArrayList<String> statuses;
ArrayList<Boolean> materials;
Context mContext;
LayoutInflater inflater;

public RepairReportListViewAdapter(Context context, ArrayList<String> err, ArrayList<String> stat, ArrayList<Boolean> mat)
{
    this.mContext = context;
    this.errors = err;
    this.statuses = stat;
    this.materials = mat;

    inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount()
{
    return 0;
}

@Override
public Object getItem(int position)
{
    return null;
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder;

    if(convertView == null)
    {
        holder = new ViewHolder();

        convertView = inflater.inflate(R.layout.repairreport_listview, null);

        holder.error = (TextView)convertView.findViewById(R.id.txtErrorInfo);
        holder.status = (TextView)convertView.findViewById(R.id.txtStatusInfo);
        holder.material = (TextView)convertView.findViewById(R.id.txtMaterialsInfo);
        holder.showMaterials = (Button)convertView.findViewById(R.id.btnShowMaterials);

        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder)convertView.getTag();
    }

    holder.error.setText(this.errors.get(position).toString());
    holder.status.setText(this.statuses.get(position).toString());

    if(this.materials.get(position) == true)
    {
        holder.material.setText("Materials where used to fix this error. Click on the button below to view the materials.");
        holder.showMaterials.setVisibility(Button.VISIBLE);
        holder.showMaterials.setOnClickListener(new View.OnClickListener()
        {       
            @Override
            public void onClick(View v) 
            {
                //LATER
            }
        });
    }
    else
    {
        holder.material.setText("No materials where used to fix this error.");
    }

    return convertView;
}

static class ViewHolder
{
    TextView error;
    TextView status;
    TextView material;
    Button showMaterials;
}

   }

我已经尝试按照建议更改布局 here但是 ListView 仍然没有显示。

为什么它没有显示有任何想法吗?抱歉代码转储,但我真的不知道到底发生了什么。

P.S. 我确实在主要 Activity 中将适配器设置为 ListView

    adapter = new RepairReportListViewAdapter(this, errorNames, statuses, materialsInUse);
    lvErrors.setAdapter(adapter);

最佳答案

您的 ListView 不会膨胀任何东西,因为 getCount 返回 0

改变

@Override
public int getCount()
{
    return 0;
}

@Override
public int getCount()
{
    return (stat == null) ? 0 : stat.size();
}

此外,您可以创建一个类来保存您需要的所有信息和此类的 ArrayList,而不是保留三个不同的 ArrayList

关于android - ListView 没有膨胀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18483734/

相关文章:

android - Android SDK 23 中的 "context click"是什么

android - 如何在 Mac Eclipse-SDK 上从 Android AVD 切换到真实硬件?

android - 为什么 Android 不让您知道 ListView 的滚动 y 位置?

android - 编辑列表查看内容 - Android

java - 带有开关按钮的 Android ListView - 一次只有一个开关处于 Activity 状态

android - 当我使用简单的 ListView 适配器时,如何在 ListView 中搜索?

android - 如何在listView中显示和隐藏按钮

android - 我需要的应用程序的移动版本,让应用程序在手机上可见

java - 在空对象引用上接收 'android.content.Context android.content.Context.getApplicationContext()'

android - java.lang.UnsupportedOperationException android 数组列表