Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList在循环时返回相同的值_Java_Android_Arraylist - Fatal编程技术网

Java ArrayList在循环时返回相同的值

Java ArrayList在循环时返回相同的值,java,android,arraylist,Java,Android,Arraylist,我有一个arraylist的毒品目标。我在药物列表中有5个对象 因此drugsList.size()返回5。有5种药物属于drugsList,分别为drugName、description和类别 我想返回5次带有名称、说明和类别的药品片段。现在的情况是,它创建了5次片段,但每个片段都具有相同的名称、描述和类别值。我100%确信清单中包含5种药物,它们有5种不同的名称/类别/描述 @Override public Fragment getItem(int position) { Drug

我有一个arraylist的毒品目标。我在
药物列表中有5个对象

因此
drugsList.size()
返回5。有5种药物属于
drugsList
,分别为
drugName
description
类别

我想返回5次带有
名称
说明
类别的
药品片段
。现在的情况是,它创建了5次片段,但每个片段都具有相同的
名称
描述
类别
值。我100%确信清单中包含5种药物,它们有5种不同的
名称/类别/描述

@Override
public Fragment getItem(int position) {

    DrugsFragment df = null;
    for(int i= 0; i < drugsList.size() ; i++) {
        drugName = drugsList.get(i).getName();
        description = drugsList.get(i).getDescription();
        category = drugsList.get(i).getCategory();

         df = DrugsFragment.newInstance(drugName, description,category);
    }

    return df;
}
@覆盖
公共片段getItem(int位置){
DrugsFragment df=null;
对于(int i=0;i

当返回
newInstance
时,我是否在这里做错了什么

每次调用该函数时,循环遍历列表并创建
Fragment
的新实例,然后返回从该函数创建的最后一个
Fragment

相反,您只需将物品从
药品列表中取下您想要的位置即可

@Override
public Fragment getItem(int position) {         
    String drugName = drugsList.get(position).getName();
    String description = drugsList.get(position).getDescription();
    String category = drugsList.get(position).getCategory();

    return DrugsFragment.newInstance(drugName, description,category);
}    
要获得5分,您可以执行以下操作:

for(int i= 0; i < drugsList.size() ; i++) {
    var Fragment = getItem(i);
}     
for(int i=0;i

您需要为
getItem()
提供访问此列表的方法,也许上面的循环可能位于另一个类方法中

返回一个
列表
而不是一个
DrugFragment
。这不是我现在设置项目的方式中的选项。我想了解出了什么问题,而不是仅仅尝试一些东西。你创建了5个片段,每次只使用最后一个片段,不管传递的位置如何。我有点不确定为什么会有一个循环。之所以会有循环,是因为每次都重写
df
中的内容,所以它会返回最后一个。好吧,你必须明白,你在为
循环声明一个
DrugFragment
并在每次迭代
时重新初始化它。无论您当前在
for
循环中执行什么操作,您只有一个
药品片段
。如果希望/需要多个片段,请返回
列表
。如果您不能满足您所说的任何要求,请在
DrugFragment
或其他类中存储一个包含适当数据的列表,并将此列表传递给您的单个
DrugFragment
。如果这也不是一个选项,那么可能你的设计被破坏了。好的,这是一个明确的答案,谢谢。我尝试循环,因为我想让它在数组中循环,每次取5个值并将它们分配给一个片段。我完全理解你的逻辑,但我不知道如何设置。也许可以展示一些预编码如何做到这一点?这是最简单的实现方法。谢谢你的帮助和解释,罗伯特。