每次滚动时ListView项(TextView)都在重新加载

时间:2017-03-20 12:14:48

标签: java android listview

我创建了一个应用程序,我想在其中执行一项任务,例如添加值并通过单击按钮减小值。它工作正常,但我面临的问题是,当我在滚动列表视图然后值为零。

但是当我点击增加按钮或减少按钮时,它会给我真正的价值。

即:当我加2个数量。点击。

当我滚动页面时它会变为0,当我点击addButton时它会给我3个。

或者当我滚动页面时它会变为0,当我点击减去按钮时它会给我1

当我滚动它时,TextView displayInteger被丢弃并忘记它的值。

这里有完整的代码: -

listViewadapter.java

 @Override
public long getItemId(int position) {
    return position;
}

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

        TextView mname , pmethod2, pamount3, premark4;
        final ImageView increase,decrease;
        final Button add;
        inflater = (LayoutInflater) cntx
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        LayoutInflater inflater = LayoutInflater.from(cntx);

        convertView = inflater.inflate(R.layout.raw_order, parent,
                false);
        decrease = (ImageView) convertView.findViewById(R.id.decrease);
        increase= (ImageView) convertView.findViewById(R.id.increase);
        add= (Button) convertView.findViewById(R.id.add);

        mname = (TextView) convertView.findViewById(R.id.mname);
        mname.setText("  " + o_aproduct.get(position));


        final TextView displayInteger = (TextView) convertView.findViewById(R.id.integer_number);
        //add.setText("  " +count);

        increase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int count = sia.get(position);
                count= count + 1;
                sia.put(position, count);
                displayInteger.setText("" + count);
                add.setText("  " +count);

                if (count > 0 ) { decrease.setEnabled(true); }
            }
        });
        decrease.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int count = sia.get(position);
                count= count- 1;
                sia.put(position, count);
                displayInteger.setText("" + count);
                add.setText("  " +count);
                if (count > 0 )
                {decrease.setEnabled(true);}
                else if (count == 0 ){
                    decrease.setEnabled(false);
                }
                else { decrease.setEnabled(false);}
            }
        });




        return convertView;
    }

1 个答案:

答案 0 :(得分:1)

使用ListView(或RecyclerView),您的事件侦听器永远不应更改视图。

事件侦听器应更新模型,然后调用notifyDataSetChanged()notifyDataSetChanged()告诉ListView从您更新的模型中刷新。

仅从getView()内直接更改视图。

    final TextView displayInteger = (TextView) convertView.findViewById(R.id.integer_number);
    int count = sia.get(position);
    displayInteger.setText("" + count);
    decrease.setEnabled(count > 0);

    increase.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int count = sia.get(position);
            count++;
            sia.put(position, count);
            notifyDataSetChanged();
        }
    });
    decrease.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int count = sia.get(position);
            count--;
            sia.put(position, count);
            notifyDataSetChanged();
        }
    });