Android ListView适配器getView无法正常工作

时间:2018-05-03 17:11:07

标签: android listview adapter

我已使用此tutorial来创建自定义列表视图,但出于某种原因,它的行为与我期望的不同。

以下是我更改的代码以及当前用于适配器的代码:

public View getView(int position, View convertView, ViewGroup parent) {
     // same code as in example with some differences in the .xml
    viewHolder.itemLabel.setText(info.split(";")[0]);
    viewHolder.itemDescription.setText(info.split(";")[1]);
    viewHolder.itemLabel.setOnClickListener(this);
    viewHolder.itemLabel.setTag(position);
    if(viewHolder.itemLabel.getText().equals("Fat")){
        System.out.println(info);
        System.out.println(viewHolder.itemLabel.getText());
        viewHolder.itemLabel.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.info_icon, 0);
    }
return convertView;
}

现在,正在发生的事情是,由于某种原因,即使标签上只有一个“Fat”,也会为列表中的多个项目设置图标。
打印实际上显示 if 上的代码正在运行三次。

enter image description here

我认为这必须与应用程序的生命周期有关,但我不确定。

如果问题含糊不清,我很抱歉,但我找不到更好的方式来问这个问题。

2 个答案:

答案 0 :(得分:1)

您需要在select e.ssn from employees e cross join projects p left join works_on wo on e.ssn = wo.ssn and p.pnumber = wo.pnumber where p.dnumber = 5 group by e.ssn having count(wo.snn) = count(*); -- no NULL values 内添加其他部分。

getView()

ConvertView参数是您之前从public View getView(int position, View convertView, ViewGroup parent) { // same code as in example with some differences in the .xml if(viewHolder.itemLabel.getText().equals("Fat")){ // Stuff }else{ // Else stuff } return convertView; } 返回的View的循环实例。你可以阅读它只是搜索它 快点。您没有在代码中正确使用视图集模式。使用它可以在列表视图中正确查找ViewHolder模式。除此之外,您现在应该转移到getView() RecyclerView

答案 1 :(得分:0)

请检查代码可能会有所帮助。

public View getView(int position, View convertView, ViewGroup parent) {
     // same code as in example with some differences in the .xml
    viewHolder.itemLabel.setText(info.split(";")[0]);
    viewHolder.itemDescription.setText(info.split(";")[1]);
    viewHolder.itemLabel.setOnClickListener(this);
    viewHolder.itemLabel.setTag(position);
    if(viewHolder.itemLabel.getText().equals("Fat")){
        System.out.println(info);
        System.out.println(viewHolder.itemLabel.getText());
        viewHolder.itemLabel.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.info_icon, 0);
    }else{
        viewHolder.itemLabel.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); 
    }
    return convertView;
}