首页 > 解决方案 > 向上或向下滚动列表视图的问题

问题描述

当我尝试获取 NumberPicker 的所有值时,它会正确返回中间的值,而第一个和最后一个仅返回在它们之间修改的最后一个值。我不明白我错在哪里。

public class piatto {
    String nome;
    String Descrizione;
    String prezzo;
    String immagine;
    String tag;


    public piatto(String nome, String Descrizione, String prezzo, String immagine, String tag) {
        this.nome= nome;
        this.Descrizione= Descrizione;
        this.prezzo= prezzo;
        this.immagine=immagine;
        this.tag=tag;

    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescrizione() {
        return Descrizione;
    }

    public void setDescrizione(String descrizione) {
        Descrizione = descrizione;
    }

    public String getPrezzo() {
        return prezzo;
    }

    public void setPrezzo(String prezzo) {
        this.prezzo = prezzo;
    }

    public String getImmagine() {
        return immagine;
    }

    public void setImmagine(String immagine) {
        this.immagine = immagine;
    }

    public String getTag() {
        return tag;
    }

    public void setTag(String tag) {
        this.tag = tag;
    }

}

这是我的适配器

public class ProductListAdapterforListView extends BaseAdapter {
    private Context mContext;
    private List<piatto> mProductList;

    public ProductListAdapterforListView(Context mContext, List<piatto> mProductList) {
        this.mContext = mContext;
        this.mProductList = mProductList;

    }
    @Override
    public int getCount() {
        return mProductList.size();
    }

    @Override
    public piatto getItem(int position) {
        return mProductList.get(position);
    }

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


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

        if (convertView==null){

            listitemview = View.inflate(mContext, R.layout.row_data_list, null);


            ImageView i = (ImageView) listitemview.findViewById(R.id.imagepiatto);
            com.shawnlin.numberpicker.NumberPicker numberPicker = (com.shawnlin.numberpicker.NumberPicker) listitemview.findViewById(R.id.number_picker);
            TextView n=(TextView) listitemview.findViewById(R.id.namepiatto);
            TextView p=(TextView) listitemview.findViewById(R.id.prezzopiatto);

            n.setText(mProductList.get(position).getNome());
            p.setText(mProductList.get(position).getPrezzo()+" €");
            Picasso.get().load(mProductList.get(position).getImmagine()).into(i);
        } else {
            listitemview=convertView;
        }

        return listitemview;
    }
    
}

这是我的 Java 类,我在其中获取每个 Item 的 NumberPicker 的值

@Override
    public void onClick(View view) {
        if (view.getId()==R.id.buttonnext){
        
            Float totale = (float) 0.0;
            String listapiatti="";

            for (int i = 0; i < listView.getChildCount(); i++) {
                view = listView.getChildAt(i);

                TextView n = view.findViewById(R.id.namepiatto);
                String nome = n.getText().toString();

                TextView p = view.findViewById(R.id.prezzopiatto);
                String pricestr = p.getText().toString();
                String[] prezzo = pricestr.split(" ");
                Float price = Float.valueOf(prezzo[0]);

                com.shawnlin.numberpicker.NumberPicker numberPicker = (com.shawnlin.numberpicker.NumberPicker) view.findViewById(R.id.number_picker);
                int value = numberPicker.getValue();

                if (value != 0) {
                    totale = totale + (price * value);
                    listapiatti = listapiatti + nome + ": " + value + ", ";
                    Toast.makeText(getApplicationContext(), String.valueOf(i)+" "+value,
                            Toast.LENGTH_LONG).show();
                }
            }
            String finale=String.valueOf(totale);


            startActivity(new Intent(carrello3.this, ordine.class));
        }
        if (view.getId()==R.id.buttonback){
            onBackPressed();
        }
    }

标签: javaandroidandroid-recyclerviewandroid-listview

解决方案


在 setOnScrollListener 上创建一个对象似乎不是一个好主意,该对象在向上/向下滚动期间被多次调用。如果你能提供更多细节会很棒。


推荐阅读