【问题标题】:A row in List View changes when scrolled (Android Studio)滚动时列表视图中的一行发生变化(Android Studio)
【发布时间】:2016-04-08 12:15:33
【问题描述】:

我尝试按照本教程创建多列列表视图:

http://techlovejump.com/android-multicolumn-listview/.

问题出现了,当记录的数量如此之大以至于整个视图超过了手机的屏幕时。现在,当我滚动时,其中一行中的所有记录都在更改(它们的值已更改)。所有其他行都很好。可能是什么问题?

 public class ListViewAdapters extends BaseAdapter{

    public ArrayList<HashMap<String, String>> list;
    Activity activity;
    TextView txtFirst;
    TextView txtSecond;
    TextView txtFourth;

    public ListViewAdapters(Activity activity, ArrayList<HashMap<String, String>> list){
        super();
        this.activity=activity;
        this.list=list;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }



    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        HashMap<String, String> map=list.get(position);
        LayoutInflater inflater=activity.getLayoutInflater();

        if(convertView == null)
        {
            if(map.get(MARKED)=="no")
             {
            convertView=inflater.inflate(R.layout.colmn_row, null);
             }
            else if (map.get(MARKED)=="yes")
            {
            convertView=inflater.inflate(R.layout.colmn_row_clicked, null);
            }
            txtFirst=(TextView) convertView.findViewById(R.id.name);
            txtSecond=(TextView) convertView.findViewById(R.id.gender);
            txtFourth=(TextView) convertView.findViewById(R.id.status);
        }

        txtFirst.setText(map.get(FIRST_COLUMN));
        txtSecond.setText(map.get(SECOND_COLUMN));
        txtFourth.setText(map.get(FOURTH_COLUMN));

        return convertView;
    }

}

【问题讨论】:

  • 行正在改变..意味着项目位置是否改变了?
  • 他们的值被改变了。
  • 尝试使用 Holder 并覆盖 BaseAdapter 的 getItemViewType()getViewTypeCount() 方法
  • 例如,我希望记录为“abc”,滚动时切换为“def”。当我滚动更多时,它是“ghj”等。
  • 从答案中尝试代码,让我知道。

标签: android listview baseadapter


【解决方案1】:

请试试这个代码:

public class ListViewAdapters extends BaseAdapter {

public ArrayList<HashMap<String, String>> list;
Activity activity;
TextView txtFirst;
TextView txtSecond;
TextView txtFourth;

public ListViewAdapters(Activity activity, ArrayList<HashMap<String, String>> list){
    super();
    this.activity=activity;
    this.list=list;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return list.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}



@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder holder;
    HashMap<String, String> map=list.get(position);
    LayoutInflater inflater=activity.getLayoutInflater();

    if(convertView == null) {
        holder = new ViewHolder();
        if (map.get(MARKED) == "no") {
            convertView = inflater.inflate(R.layout.colmn_row, null);
        } else if (map.get(MARKED) == "yes") {
            convertView = inflater.inflate(R.layout.colmn_row_clicked, null);
        }
        holder.txtFirst = (TextView) convertView.findViewById(R.id.name);
        holder.txtSecond = (TextView) convertView.findViewById(R.id.gender);
        holder.txtFourth = (TextView) convertView.findViewById(R.id.status);

        holder.txtFirst.setText(map.get(FIRST_COLUMN));
        holder.txtSecond.setText(map.get(SECOND_COLUMN));
        holder.txtFourth.setText(map.get(FOURTH_COLUMN));
    }else {
        holder = (ViewHolder) convertView.getTag();
    }
    return convertView;
}

@Override
public int getItemViewType(int position) {
    return position;
}

@Override
public int getViewTypeCount() {
    return getCount();
}

public class ViewHolder {
    TextView txtFirst, txtSecond,txtFourth;

}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多