在android中显示对象列表

时间:2017-04-13 23:18:47

标签: android for-loop foreach iterator

我正在尝试显示整个对象列表,但我只显示最后一个列表。

我用于旅行的代码,但它只显示了列表的最后一个。

抱歉我的英语不好:(

代码:

if(!L.isEmpty()){
        for(Iterator<Bits> i = L.iterator(); i.hasNext(); ) {
            Bits item = i.next();
            imageBit.setImageBitmap(BitmapFactory.decodeFile(item.getbImage()));
            nameBit.setText(item.getbText());
            System.out.println(item);
        }


    }

2 个答案:

答案 0 :(得分:1)

这是因为您每次迭代都要为nameBit TextView设置新的文本值。对于ImageView也是如此。因此,当循环到达其结尾时,它会为最后一个项目名称指定文本值,并为图像指定相同的文本值。您可能应该为文本做下一步:

if(!L.isEmpty()){
  StringBuilder builder = new StringBuilder();
  for(Iterator<Bits> i = L.iterator(); i.hasNext(); ) {
    Bits item = i.next();
    imageBit
      .setImageBitmap(
        BitmapFactory.decodeFile(item.getbImage())
      );
    builder.append(item.getbText()).append("\n");
  }
  String resultingText= builder.toString();
  nameBit.setText(resultingText);
  System.out.println(resultingText);
}

这将显示TextView中的所有文本值。 顺便说一句,通过imageBit中的这种实现,您只能看到最后一张图像。 所以我假设你没有正确选择架构。请参阅ListViewRecyclerView文档。这个视图的目的是显示对象列表,如果您正确实现它。

答案 1 :(得分:0)

要显示延迟所有图像,请尝试此操作。

在您的班级中创建以下变量:

final Handler handler = new Handler();
private int currentPosition = 0;

然后调用以下方法开始在onCreate,onResume中显示图像,或者当您想要全部启动时:

showNextImage();

Ant showNextImage的代码应该是这样的:

private void showNextImage() {
    // loads the image at position currentPosition
    Bits item = L.get(currentPosition);
    imageBit.setImageBitmap(BitmapFactory.decodeFile(item.getbImage()));
    nameBit.setText(item.getbText());
    System.out.println(item);

    currentPosition++; // updates the current position
    if (L.size() > currentPosition) { // more images to show?
        // loads the next image after some delay
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                showNextImage();
            }
        }, 1000); // in millis, 1000 for one second delay
    }
}

我添加了一些评论只是为了澄清。你可以删除它们。

它应该有用。