繁体   English   中英

Android RecyclerView-计算项目

[英]Android RecyclerView - Calculate items

我正在开发一个Android项目,并创建了RecyclerView - CardView

该应用程序将如下图所示。

应用图片

该应用程序正在运行,但是在输入一些数据后无法计算一些数字。

我需要:

  • 如我插入数据,该应用显示“Quantidade”字段和上了“勇气Unitário”域的相乘的值TextView即根据“勇气合计”。

我该怎么做?

代码在这里:MainActivity.java

package com.example.rooseveltjunior.gastosrestaurante;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuItem;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recList = (RecyclerView) findViewById(R.id.listaGastos);
        recList.setHasFixedSize(true);
        LinearLayoutManager llm = new LinearLayoutManager(this);
        llm.setOrientation(LinearLayoutManager.VERTICAL);
        recList.setLayoutManager(llm);

        GastosAdaptador ga = new GastosAdaptador(creatList(3));
        recList.setAdapter(ga);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.

        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private List<GastosInfo> creatList(int size) {

        List<GastosInfo> result = new ArrayList<GastosInfo>();
        for (int i = 1; i < size; i++) {
            GastosInfo ci = new GastosInfo();
            ci.descricao = GastosInfo.DESCRICAO_PREFIX;
            ci.quantidade = GastosInfo.QUANTIDADE_PREFIX;
            ci.valor_unitario = GastosInfo.VALOR_UNITARIO_PREFIX;
            ci.valor_total = GastosInfo.VALOR_TOTAL_PREFIX;

            ci.qnt = GastosInfo.Qnt_Prefix;
            ci.val_unit = GastosInfo.Val_Unit_Prefix;
            ci.val_tot = GastosInfo.Qnt_Prefix + GastosInfo.Val_Unit_Prefix;

            result.add(ci);
        }
        return result;
    }
}

数据

package com.example.rooseveltjunior.gastosrestaurante;

/**
 * Created by Roosevelt.junior on 18/11/2015.
 */
class GastosInfo {

    String descricao;
    String quantidade;
    String valor_unitario;
    String valor_total;
    int qnt;
    int val_unit;
    int val_tot;

    static final String DESCRICAO_PREFIX = "Item ";
    static final String QUANTIDADE_PREFIX = "Quantidade: ";
    static final String VALOR_UNITARIO_PREFIX = "Valor Unitário: ";
    static final String VALOR_TOTAL_PREFIX = "Valor Total";
    static final int Qnt_Prefix = 0;
    static final int Val_Unit_Prefix = 0;

}

适配器

package com.example.rooseveltjunior.gastosrestaurante;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;

import java.util.List;

/**
 * Created by Roosevelt.junior on 18/11/2015.
 */
public class GastosAdaptador extends RecyclerView.Adapter<GastosAdaptador.GastosViewHolder> {

    private List<GastosInfo> gastosLista;

    public GastosAdaptador(List<GastosInfo> gastosLista){

        this.gastosLista = gastosLista;
    }

    @Override
    public GastosViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View itemView = LayoutInflater.
                from(viewGroup.getContext()).
                inflate(R.layout.card_gastos,viewGroup,false);
        return new GastosViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(GastosViewHolder gastosViewHolder, int i) {
        GastosInfo ci = gastosLista.get(i);
        gastosViewHolder.vDescricao.setText(ci.descricao);
        gastosViewHolder.vQuantidade.setText(ci.quantidade);
        gastosViewHolder.vValorUnitario.setText(ci.valor_unitario);
        gastosViewHolder.vValorTotal.setText(ci.valor_total);
    }

    @Override
    public int getItemCount() {
        return gastosLista.size();
    }

    public static class GastosViewHolder extends RecyclerView.ViewHolder {

        TextView vDescricao;
        TextView vQuantidade;
        TextView vValorUnitario;
        TextView vValorTotal;
        EditText vQnt;
        EditText vValUnit;
        TextView vValTot;

        public GastosViewHolder (View v){
            super(v);
            vDescricao = (TextView) v.findViewById(R.id.txtDescricao);
            vQuantidade = (TextView) v.findViewById(R.id.txtQuantidade);
            vValorUnitario = (TextView) v.findViewById(R.id.txtValorUnitario);
            vValorTotal = (TextView) v.findViewById(R.id.txtValorTotal);
            vQnt= (EditText) v.findViewById(R.id.txtEditQnt);
            vValUnit = (EditText) v.findViewById(R.id.txtEditUnit);
            vValTot = (TextView) v.findViewById(R.id.txtTotal);

        }
    }
}

在您的onBindViewHolder

@Override
public void onBindViewHolder(GastosViewHolder gastosViewHolder, int i) {
    GastosInfo ci = gastosLista.get(i);
    gastosViewHolder.vDescricao.setText(ci.descricao);
    gastosViewHolder.vQuantidade.setText(ci.quantidade);
    gastosViewHolder.vValorUnitario.setText(ci.valor_unitario);
    gastosViewHolder.vValorTotal.setText(ci.valor_total);

    TextWatcher textWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) { }

        @Override
        public void afterTextChanged(Editable s) {
            float a, b;
            try {
                a = Float.parseFloat(gastosViewHolder.vQuantidade.getText());
                b = Float.parseFloat(gastosViewHolder.vValorUnitario.getText());
                gastosViewHolder.vValorTotal.setText(String.valueOf(a * b));
            } catch (Exception e) {
                // you might want to change the catch blocks to specific exceptions
                // and handle them properly
            }
        }
    };

    gastosViewHolder.vQuantidade.addTextChangedListener(textWatcher);
    gastosViewHolder.vValorUnitario.addTextChangedListener(textWatcher);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM