howtocode101 Ответов: 0

Как я могу получить значение из 2 различных listviews recycler view data и объединить его значение суммирования в textview


Я создал 2 списка, которые показывают доходы и расходы бюджета.
Мне удается получить его общую сумму индивидуально в каждом listview и показать ее в их textview.

Теперь мне трудно получить оставшиеся наличные деньги, которые представляют собой общую сумму из listview1 минус общая сумма из listview2, и показать ее как textview tvtotal3.



MainActivity.java
<pre>

public class MainActivity extends AppCompatActivity {

  String totalPricefinal = "" ;
  int value1,value2,value3;


   TextView tvtotal,tvtotal2,tvtotal3;

    EditText etCategory, etcash;

    RecyclerView  recyclerView2, recyclerView1;
    RecyclerView.Adapter myAdapter2, myAdapter1;
    RecyclerView.LayoutManager LayoutManager2, LayoutManager1;
    Button btnIncome, btnExpense;
    ArrayList<Budget> money;
    ArrayList<Budget2> money2;

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

        tvtotal = findViewById(R.id.tvtotal);
        tvtotal2 = findViewById(R.id.tvtotal2);
        tvtotal3 = findViewById(R.id.tvtotal3);

        etCategory = findViewById(R.id.etCategory);
        etcash = findViewById(R.id.etcash);

        recyclerView2 = findViewById(R.id.list2);
        recyclerView2.setHasFixedSize(true);

        recyclerView1 = findViewById(R.id.list);
        recyclerView1.setHasFixedSize(true);

        btnIncome = findViewById(R.id.btnIncome);
        btnExpense = findViewById(R.id.btnExpense);


        btnIncome.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                money.add(new Budget( etCategory.getText().toString().trim(), etcash.getText().toString().trim()));
                myAdapter1.notifyDataSetChanged();
                recyclerView1.setAdapter(myAdapter1);

                int totalPrice = 0;
                for (int i = 0; i<money.size(); i++)
                {

                    totalPrice += Integer.parseInt(money.get(i).getNumbers());
                    totalPricefinal = Integer.toString(totalPrice);
                }

                tvtotal.setText(Integer.toString(totalPrice));
            }
        });

        btnExpense.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                money2.add(new Budget2( etCategory.getText().toString().trim(), etcash.getText().toString().trim()));
                myAdapter2.notifyDataSetChanged();
                recyclerView2.setAdapter(myAdapter2);

                int totalPrice2 = 0;
                for (int i = 0; i<money2.size(); i++)
                {
                    totalPrice2 += Integer.parseInt(money2.get(i).getNumbers2());
                }

                tvtotal2.setText(Integer.toString(totalPrice2));

            }
        });

        value1 = Integer.parseInt(tvtotal.getText().toString());
        value2 = Integer.parseInt(tvtotal2.getText().toString());
        value3 = value1-value2;

        tvtotal3.setText(Integer.toString(value3));

        LayoutManager2 = new LinearLayoutManager(this);
        recyclerView2.setLayoutManager(LayoutManager2);

        LayoutManager1 = new LinearLayoutManager(this);
        recyclerView1.setLayoutManager(LayoutManager1);

        money = new ArrayList<Budget>();
        money2 = new ArrayList<Budget2>();

        myAdapter1 = new budgetAdapter(this,money);
        recyclerView1.setAdapter(myAdapter1);

        myAdapter2 = new budgetAdapter2(this,money2);
        recyclerView2.setAdapter(myAdapter2);


    }
}


BudgetAdapter.java

<pre>public class budgetAdapter extends RecyclerView.Adapter<budgetAdapter.ViewHolder> {

    private ArrayList<Budget> money;
    private int finalprice = 0;

    public budgetAdapter (Context context, ArrayList<Budget> List)
    {
        money = List;
    }

    public class ViewHolder extends RecyclerView.ViewHolder
    {

        TextView tvName;
        TextView tvNumbers;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            tvName = itemView.findViewById(R.id.tvName);
            tvNumbers = itemView.findViewById(R.id.tvNumbers);
        }
    }

    @NonNull
    @Override
    public budgetAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {

        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_items, viewGroup, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull budgetAdapter.ViewHolder viewHolder, int i) {
        viewHolder.itemView.setTag(money.get(i));
        viewHolder.tvName.setText(money.get(i).getName());
        viewHolder.tvNumbers.setText(money.get(i).getNumbers());

    }

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


Budget.java
public class Budget extends MainActivity {
    private String name;
    private String numbers;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumbers() {
        return numbers;
    }

    public void setNumbers(String numbers) {
        this.numbers = numbers;
    }

    public Budget(String name, String numbers) {
        this.name = name;
        this.numbers = numbers;
    }
}


BudgetAdapter2.java
<pre>public class budgetAdapter2 extends RecyclerView.Adapter<budgetAdapter2.ViewHolder> {



    private ArrayList<Budget2> money2;

    public budgetAdapter2 (Context context, ArrayList<Budget2> List)
    {
        money2 = List;
    }

    public class ViewHolder extends RecyclerView.ViewHolder
    {

        TextView tvName;
        TextView tvNumbers;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            tvName = itemView.findViewById(R.id.tvName);
            tvNumbers = itemView.findViewById(R.id.tvNumbers);
        }
    }


    @NonNull
    @Override
    public budgetAdapter2.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_items, viewGroup, false);

        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull budgetAdapter2.ViewHolder viewHolder, int i) {

        viewHolder.itemView.setTag(money2.get(i));
        viewHolder.tvName.setText(money2.get(i).getName2());
        viewHolder.tvNumbers.setText(money2.get(i).getNumbers2());

    }

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


Budget2.java

public class Budget2 {
    private String name2;
    private String numbers2;

    public String getName2() {
        return name2;
    }

    public void setName2(String name2) {
        this.name2 = name2;
    }

    public String getNumbers2() {
        return numbers2;
    }

    public void setNumbers2(String numbers2) {
        this.numbers2 = numbers2;
    }

    public Budget2(String name2, String numbers2) {
        this.name2 = name2;
        this.numbers2 = numbers2;
    }
}


Что я уже пробовал:

В последнем столбце я попытался получить данные из циклов for. Приложение удалось скомпилировать, но во время тестирования никаких данных не было показано. Пожалуйста помочь.

wseng

можете ли вы получить value1 и value2?

howtocode101

Нет. Я не могу получить значения 1 и 2. удалось скомпилировать, но не удалось приложение принудительно закрыть. Logcat показывает, что выделение начинается со значения 1 строки.

wseng

Пожалуйста, опубликуйте logcat.

howtocode101

Привет, я уже обновил свой logcat

wseng

Какая переменная возвращает "Total"? Он должен возвращать только int, а не String.

howtocode101

Я вижу. Есть ли какой-нибудь способ вернуть значение "totalPrice2" и "totalPrice" из цикла for? Они находятся в методе void, поэтому я не мог вернуть значение в основной метод.

wseng

Да,может быть. Но мне нужно больше кода. Все ли они занимаются одной и той же деятельностью?

howtocode101

Нет. Адаптеры разделены. Я обновил полный код.

wseng

Из вашего последнего кода, приложение все еще разбилось или вы не получаете никаких данных?

howtocode101

Последний код разбился, но при удалении этого кода в mainactivity "value1 = Integer.parseInt(tvtotal.getText().toString());
значение2 = целое число.parseInt(tvtotal2.то gettext().метод toString());
value3 = value1-value2;", он способен нормально запускать код.

wseng

Добавьте журнал внутри цикла for

totalPrice += Integer.parseInt(money.get(i).getNumbers());Log.d(TAG,money.get(i).getNumbers())
Что отображается в журнале?
money.get(i).getNumbers()

Richard MacCutchan

Измените метод, чтобы вернуть значение. Подумайте о том, чего вы пытаетесь достичь. Если вы можете вычислить любое общее значение, то вам нужен какой-то способ передать его обратно любому вызывающему методу, который нуждается в доступе к этому значению.

Gerry Schmitz

Попробуйте "соединить" наборы данных, а не представления списка. Работайте умнее, а не усерднее.

0 Ответов