Как я могу получить значение из 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
Попробуйте "соединить" наборы данных, а не представления списка. Работайте умнее, а не усерднее.