在android上滚动时列表视图位置正在改变 [英] list view position is getting changed when scrolling on android

查看:14
本文介绍了在android上滚动时列表视图位置正在改变的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有包含更多数据的列表视图 [文本视图和复选框控件].我将从列表视图中选择项目并在下一个活动中显示所选项目.我的问题是,例如,如果我在列表视图中选择第 20 个和第 25 个项目,它将在下一个活动中显示一些其他项目.即滚动时列表视图位置会发生变化.

I have list view [text view and check box controlls] with more data. I will choose the item from list view and display the selected items in the next activity. My problem is, for the example if I choose 20th and 25th item in the list view it will display some other items in the next activity. That is list view position is getting changed when scrolling.

我正在通过单击项目上的复选框来选择项目.在 checkbox.setOnChanged 侦听器中,我编写了选择或不选择位置的代码.如果我选择第 25 项并滚动列表视图,则调用 getview 方法并且 checkbox.setonChanged 方法更改所选位置. 我最后打印 logcat.

i am choosing an item by clicking the check box on the item. in the checkbox.setOnChanged listener i wrote code for which position is selected or not. if i choose 25th item and scroll the list view, the getview method is called and the checkbox.setonChanged method is change the selected position. I print the logcat at last.

我的编码格式:

public class ListContact extends ListActivity {
  public void onCreate(Bundle icicle){
    .....
    ArrayAdapter<Model> adapter = new MyCustomArrayAdapter(this,getModel());
    setListAdapter(adapter);
  }
 ....
private List<Model> getModel() {
    List<Model> list = new ArrayList<Model>();

Iterator<String> itr = constant.selectname.iterator();
    while (itr.hasNext()) {
        list.add(get(itr.next().toString()));
    }
    return list;
}

private Model get(String s) {
    return new Model(s);
}  

}

MyCustomArrayAdapter.java:

MyCustomArrayAdapter.java:

public class MyCustomArrayAdapter extends ArrayAdapter<Model> {

    private final List<Model> list;
    private final Activity context;
    constant con ;
    public MyCustomArrayAdapter(Activity context, List<Model> list) {
        super(context, R.layout.list_layout, list);
        this.context = context;
        this.list = list;
    }

    static class ViewHolder {
        protected TextView text;
        protected CheckBox checkbox;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

//      Log.e("getview", "getview");
        View view = null;
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            view = inflator.inflate(R.layout.list_layout, null);
            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.text = (TextView) view.findViewById(R.id.label);
            viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
            viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
//                          con = new constant();
                            Model element = (Model) viewHolder.checkbox.getTag();
                            element.setSelected(buttonView.isChecked());
//                          Log.e("MyCustomArrayAdapter.java", "selectpos array list length"+constant.selectpos.size());
                            if(isChecked==true){
                                Log.e("check box value and position  ", element.getName());
                                Log.e("position", ""+position);
                                con.selectpos.set(position, 1);

                            }
                            else{
                                Log.e("position unselect", ""+position +"---------"+ element.getName());
                                con.selectpos.set(position, 0);
                            }
                        }
                    });
            view.setTag(viewHolder);
            viewHolder.checkbox.setTag(list.get(position));
        } else {
            view = convertView;
            ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
        }
        ViewHolder holder = (ViewHolder) view.getTag();
        holder.text.setText(list.get(position).getName());
        holder.checkbox.setChecked(list.get(position).isSelected());
        return view;
    }
}

logcat 结果:

02-08 10:44:28.142: E/check box value and position(293): AAAA  Qqq 
02-08 10:44:28.142: E/check box value and position(293): Mobile-123
02-08 10:44:28.152: E/position(293): 0

**after scrolling the list view some other item print 0th position unselected and wrong data:**
02-08 10:44:31.962: E/position unselect(293): 0---------F212
02-08 10:44:31.962: E/position unselect(293): Home-232

推荐答案

我解决了这个问题.我添加了

I solved the problem. i add the

  View view = null;
  convertView = null;  //in the get view and comments the else part of
        if (convertView == null) {
                }
                /*else{
                } */

这篇关于在android上滚动时列表视图位置正在改变的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆