【问题标题】:Custom ListView show only one record自定义 ListView 只显示一条记录
【发布时间】:2018-06-02 14:42:53
【问题描述】:

您好,我的自定义列表视图仅显示一条记录。一切都很好,它在控制台中显示了多条记录,但是当我尝试在ListView 中显示记录时,它只显示最后一条记录,它最重要的第一条记录,目前有两条记录显示在我的控制台中,但在ListView 它显示仅最后一条记录,我从昨天开始一直在寻找解决方案,我花了超过 6 个小时来解决这个问题。

Cart_Adapter.java

public class Cart_Adapter extends BaseAdapter {
    Activity activity;
    ArrayList<ProductBean> list;
    String abc;
    public Cart_Adapter(Activity activity, ArrayList<ProductBean> list) {
    this.activity = activity;
    this.list = list;
}

@Override
public int getCount() {

        return list.size();
}

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

@Override
public long getItemId(int i) {
        return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    View v=view;
    if(v==null){

        LayoutInflater layoutInflater= (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v=layoutInflater.inflate(R.layout.cartxml,null);

    }
        TextView title=(TextView) v.findViewById(R.id.title);
        TextView size=(TextView) v.findViewById(R.id.size);
        TextView color=(TextView) v.findViewById(R.id.color);
        Button remove=(Button) v.findViewById(R.id.remove);
        ImageView imageView=(ImageView) v.findViewById(R.id.imageView);
        title.setText(list.get(i).getTitle());
        size.setText(list.get(i).getSize());
        color.setText(list.get(i).getColor());

    ArrayList<ImagesBean> aa =list.get(i).getImagesList();
    if(aa!=null){
    for(i=0; i<aa.size(); i++) {

        abc = String.valueOf(aa.get(i).getImgone());
        System.out.println("--testing" + abc);
    }

    }
    System.out.println("===="+abc);
    if(abc !=null ) {
        imageView.setImageBitmap(getBitmapFromString(abc));
        //  imageView.setImageBitmap(getBitmapFromString(list.get(i).getImagesList()));
    }else{}
    return v;
}

   private Bitmap getBitmapFromString(String encode){
        byte[]  b = Base64.decode(encode,Base64.DEFAULT);
        return BitmapFactory.decodeByteArray(b,0,b.length);
   }
}

我从中获取数据库记录的类

 ArrayList<String> arrayList=mydatabase.getpid(userid);
    System.out.println("--outside"+arrayList);
    for(int i =0; i<arrayList.size(); i++) {

        String l = arrayList.get(i);
        final String ll = l.toString().replace("[", "").replace("]", "").replace(" ", "");
        System.out.println("--before loop" + ll);

        for (String s : ll.split(",")) {

            int pid = Integer.parseInt(s);
            myadapter = new Cart_Adapter(Cart.this, mydatabase.getproduct_details(pid));
            lv.setAdapter(myadapter);
            }

        }

Activity_cart.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.bhm.ishopping.Cart">

<android.support.constraint.ConstraintLayout

    android:id="@+id/customlayout"
    android:layout_width="410dp"
    android:layout_height="63dp"
    android:layout_marginStart="8dp"
    android:background="#39a423"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.617"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <TextView
        android:id="@+id/textView15"
        android:layout_width="86dp"
        android:layout_height="29dp"
        android:layout_marginStart="320dp"
        android:textColor="@android:color/holo_blue_bright"
        android:textSize="18sp"
        app:layout_constraintStart_toStartOf="parent"
        tools:layout_editor_absoluteY="16dp" />


</android.support.constraint.ConstraintLayout>

<TextView
    android:id="@+id/textView19"
    android:layout_width="171dp"
    android:layout_height="34dp"
    android:layout_marginEnd="120dp"
    android:layout_marginTop="76dp"
    android:text="Your Cart Detail"
    android:textColor="@android:color/black"
    android:textSize="22sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<ListView
    android:id="@+id/lv"
    android:layout_width="373dp"
    android:layout_height="411dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="20dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.4"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/customlayout" />

<Button
    android:id="@+id/submit"
    android:layout_width="230dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="76dp"
    android:layout_marginTop="40dp"
    android:text="Submit Your Order"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/lv" />

 </android.support.constraint.ConstraintLayout>

Cart.xml

<?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="match_parent">

<ImageView
    android:id="@+id/imageView"
    android:layout_width="99dp"
    android:layout_height="87dp"
    android:layout_alignParentStart="true"
    android:layout_alignTop="@+id/remove"
    android:layout_marginStart="16dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/ic_launcher_background" />

<TextView
    android:id="@+id/textView16"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/imageView"
    android:layout_marginStart="15dp"
    android:layout_toEndOf="@+id/imageView"
    android:text="Ttile"
    android:textColor="@android:color/background_dark"
    android:textSize="18sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.456"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/textView17"
    android:layout_width="wrap_content"
    android:layout_height="24dp"
    android:layout_alignParentTop="true"
    android:layout_alignStart="@+id/textView16"
    android:layout_marginTop="102dp"
    android:text="Color"
    android:textColor="@android:color/black"
    android:textSize="18sp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textView16" />

<TextView
    android:id="@+id/textView18"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignEnd="@+id/textView17"
    android:layout_below="@+id/textView17"
    android:text="Size"
    android:textColor="@android:color/black"
    android:textSize="18sp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textView17" />

<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignStart="@+id/size"
    android:layout_alignTop="@+id/remove"
    android:text="TextView"
    android:textColor="@android:color/black"
    android:textSize="18sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/color"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/imageView"
    android:layout_alignStart="@+id/size"
    android:text="TextView"
    android:textColor="@android:color/black"
    android:textSize="18sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/title" />

<TextView
    android:id="@+id/size"
    android:layout_width="wrap_content"
    android:layout_height="21dp"
    android:layout_above="@+id/textView18"
    android:layout_marginEnd="26dp"
    android:layout_toStartOf="@+id/remove"
    android:text="TextView"
    android:textColor="@android:color/black"
    android:textSize="18sp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/color" />


<Button
    android:id="@+id/remove"
    android:layout_width="46dp"
    android:layout_height="67dp"
    android:layout_alignBottom="@+id/size"
    android:layout_alignParentEnd="true"
    android:layout_marginEnd="13dp"
    android:background="#5d8f37"
    android:text="X"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

 </RelativeLayout>

控制台输出显示两条记录

enter code here System.out: ===pids1 System.out: ==database record[ProductBean{id='', title='ddd', color='dff', size='Select Size', type='Shart', cost='ddf', imagesList=null System.out: ===pids2 System.out: ==database record[ProductBean{id='', title='aa', color='aa', size='Select Size', type='Select Type', cost='aa', imagesList=null}]

【问题讨论】:

  • cartxml 显示您的布局文件
  • 我已经添加了适配器和活动的xml文件也请检查

标签: android listview arraylist android-sqlite


【解决方案1】:

您需要将cartxml 设为android:layout_height="wrap_content"

如下代码

 <?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"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="wrap_content">

编辑

ArrayList<ProductBean> list= new ArrayList();
ArrayList<String> arrayList=mydatabase.getpid(userid);
    System.out.println("--outside"+arrayList);
   myadapter = new Cart_Adapter(Cart.this, list);
    lv.setAdapter(myadapter);
    for(int i =0; i<arrayList.size(); i++) {

        String l = arrayList.get(i);
        final String ll = l.toString().replace("[", "").replace("]", "").replace(" ", "");
        System.out.println("--before loop" + ll);

        for (String s : ll.split(",")) {

            int pid = Integer.parseInt(s);
            list.addAll(mydatabase.getproduct_details(pid));

            }

        }
      myadapter.notifyDataSetChanged().

【讨论】:

【解决方案2】:
 for (String s : ll.split(",")) {

        int pid = Integer.parseInt(s);
        myadapter = new Cart_Adapter(Cart.this, mydatabase.getproduct_details(pid));
        lv.setAdapter(myadapter);
        }

您在循环内设置适配器。这是完全错误的。将此代码放在 Loop 之外。 还有一件事是升级到 RecyclerView 的时候了。它是 ViewHolder Pattern 的简单和更好的实现。

 ArrayList<String> arrayList=mydatabase.getpid(userid);
 ArrayList<String> dataList=new ArrayList();;
        for(int i =0; i<arrayList.size(); i++) {
            String l = arrayList.get(i);
            final String ll = l.toString().replace("[", "").replace("]", "").replace(" ", "");
            System.out.println("--before loop" + ll);
            for (String s : ll.split(",")) {
              // Do your stuff add data to list here
               dataList.add(stringToAdd);
            }
        }
        myadapter = new Cart_Adapter(Cart.this, dataList);
        lv.setAdapter(myadapter);

这样做,如果您的数据集没有正确构建,那么我认为您在列表中使用了错误的数据集。或者您可能需要 ExpandableListView 。首先找出当前的dataSet是'ArrayList'。

【讨论】:

  • 如果我不将适配器放在循环中,那么我如何获得多条记录,因为 pid 有两条记录
  • 每次您在同一个 ListView 上调用 setAdapter 时,前一个都是 override 。解决方案是在循环中构建记录列表,然后将适配器设置为外部循环。
  • 兄弟,我这样做了,我刚刚将 lv.setAdapter(myadapter) 放在循环之外,但它仍然只显示最后一条记录
  • 你的名单是什么兄弟?如何在循环外填充多条记录?
  • 这就是我所说的你需要弄清楚它,因为我不知道你的模型。它应该是包含 listView 的所有数据的单个列表。请参阅它显示如何构建列表的更新答案。虽然我不知道这个列表到底包含什么以及为什么这个拆分循环是,但它会给出这个想法。谢谢
【解决方案3】:

在 getCount() 中打印您的列表大小,以确保列表是否在内部发送。检查项目的 layout_height,它应该是 wrap_content。

【讨论】:

  • 怎么做?
  • 在 getCount() 方法中记录您的数组列表大小 - 'Log.d('TAG',"size - "+ list.size())'。布局“R.layout.cartxml”中的第一个视图应具有高度“wrap_content”。
【解决方案4】:

因为您正在循环中设置适配器每个项目。

for (String s : ll.split(",")) {

            int pid = Integer.parseInt(s);
            myadapter = new Cart_Adapter(Cart.this, mydatabase.getproduct_details(pid));
            lv.setAdapter(myadapter);
            }

        }

因此它将从迭代中获取最后一个 pid,并将获取您在卡适配器中设置的产品详细信息。

错误的部分是:您在循环中的每次迭代都调用 setAdapter()

解决方案: 在循环中收集记录列表,您可以在数组列表中不断添加产品详细信息,然后在适配器中将最终列表设置在循环之外。

【讨论】:

  • 现在我正在调用 lv.setAdapter(myadapter);在循环之外,但仍然只显示一条记录
  • 给我看看你的PID记录和结构,能很快帮到你!
  • 我添加了控制台输出
【解决方案5】:

检查您的cartxml 布局文件。根RelativeLayout 高度将为wrap_content 否则它将占用单个项目的所有可用空间。在您的cartxml 中使用android:layout_width="wrap_content" 代替RelativeLayoutin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多