我需要帮助为适配器中的listView项创建动态按钮。 以下代码是我的适配器getView函数:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView==null) {
convertView = getLayoutInflater().inflate(R.layout.sell_animal_list_entry,null);
}
Animal animal = (Animal) getItem(position);
int count = 0;
int value = 0;
int age = 0;
int lifespan = 0;
int savePosition = 0;
String name = null;
lifespan = animal.getLifespan();
age = animal.getAge();
value = animal.getValue();
name = animal.getName();
savePosition = animal.getPosition();
LinearLayout buttonLayout = (LinearLayout) convertView.findViewById(R.id.buttonIncludeLayout);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
Button sellButton = new Button(SellAnimalActivity.this);
sellButton.setText(getResources().getString(R.string.sellAnimalButtonText));
count = buttonLayout.getChildCount();
if (count == 0) {
final int finalSavePosition = savePosition;
sellButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
displaySellWarning(finalSavePosition);
}
});
buttonLayout.addView(sellButton, lp);
}
return convertView;
}
我现在的问题是我无法在点击按钮时出售正确的动物。
列表中有5种不同的动物。前3只动物正常工作,
但是第4和第5只动物出错了按钮来卖掉第一只动物,即使名字是正确的循环。
编辑:
为了进一步说明:我的ListView布局显示动物的名称,它的寿命和年龄,我动态地添加一个按钮。名称,年龄和寿命都适用于每只动物。
按钮应该卖动物。它可以在列表中的动物3上运行。但第4和第5只动物的按钮试图卖掉第1只动物。
当我记录savePosition时,我得到以下值:
0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,3,4
对我来说,他只在第5次循环中读取第4和第5个条目似乎很奇怪?
经过这么多个小时后,也许你可以给我一个解决方案暗示,为什么第4和第5只动物错了?
答案 0 :(得分:0)
出于某种原因,我以前没有找到它,当我在搜索时,这里有一个和我一样有问题的人: related question
解决方案也在那里发布。 当listView具有布局时,ListView会显得很混乱:wrap_content的高度。它需要是fill_parent。