簡體   English   中英

每次滾動時都會重新加載ListView Items(TextView)

[英]ListView Items(TextView) is reloading everytime when Scrolling

我創建了一個應用程序,在該應用程序中我想執行諸如單擊按鈕來增加值和減少值的任務。它工作正常,但是我面臨的問題是,當我滾動列表視圖時,值是得到零0。

但是,當我單擊增加按鈕或減少按鈕時,它給了我真正的價值。

即:當我加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;
    }

使用ListView (或RecyclerView ),您的事件偵聽器永遠都不應更改View。

事件偵聽器應更新Model,然后調用notifyDataSetChanged() notifyDataSetChanged()告訴ListView從更新的Model中刷新。

僅直接在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();
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM