Android Studio:在Adapter中动态添加按钮

时间:2016-03-18 15:28:18

标签: android listview button android-studio adapter

我需要帮助为适配器中的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只动物错了?

1 个答案:

答案 0 :(得分:0)

出于某种原因,我以前没有找到它,当我在搜索时,这里有一个和我一样有问题的人: related question

解决方案也在那里发布。 当listView具有布局时,ListView会显得很混乱:wrap_content的高度。它需要是fill_parent。