public void onBindViewHolder方法内部的值无法传递外部
//定义了全局变量totalamount
public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder>{
private List<Cart> mcartlist;
private Context mContext;
private double totalamount;
public void onBindViewHolder(@NonNull CartAdapter.ViewHolder holder, int position) {
//计算总价格
double totalPrice1=0.0;
for (Cart cart1:mcartlist) {
System.out.println("Inside loop, cart: " + cart1.getBook_name());
double bookNumber = Double.parseDouble(cart1.getBook_number());
double price = Double.parseDouble(cart1.getPrice());
totalPrice1 += (bookNumber * price);
}
System.out.println("总价个为:========= " + totalPrice1);
totalamount = totalPrice1;
System.out.println("=============输出测试(内部=============");
System.out.println(totalamount);
}
public double getTotalAmount() {
System.out.println("=============输出测试(外部=============");
System.out.println(totalamount);
return totalamount;
}
两次输出结果不同
I/System.out: =============输出测试(内部=============
I/System.out: 254.0
I/System.out: =============输出测试(外部=============
I/System.out: 0.0
【以下回答由 GPT 生成】
问题分析: 问题出现在CartAdapter
的onBindViewHolder
方法中,onBindViewHolder
方法是在每个ViewHolder被绑定到RecyclerView时被调用的方法,而getTotalAmount
方法是在外部调用的,所以在调用getTotalAmount
方法时,可能还没有执行到onBindViewHolder
方法,导致获取到的totalamount
还是初始值0。
解决方案: 可以修改代码,将计算总价格的逻辑放在外部,在外部维护一个全局变量或方法来获取总价格。
可以在Activity
或Fragment
中调用CartAdapter
的计算总价格方法,并获取结果。
以下是修改后的代码示例:
public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder>{
// ...
public void onBindViewHolder(@NonNull CartAdapter.ViewHolder holder, int position) {
// ...
}
// 新增计算总价格的方法
public double calculateTotalAmount() {
double totalPrice = 0.0;
for (Cart cart : mcartlist) {
double bookNumber = Double.parseDouble(cart.getBook_number());
double price = Double.parseDouble(cart.getPrice());
totalPrice += (bookNumber * price);
}
return totalPrice;
}
}
在外部调用calculateTotalAmount
方法来计算总价格,并获取结果。
例如,在Activity
中调用CartAdapter
的calculateTotalAmount
方法:
public class MainActivity extends AppCompatActivity {
private CartAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化RecyclerView和Adapter
RecyclerView recyclerView = findViewById(R.id.recycler_view);
mAdapter = new CartAdapter();
recyclerView.setAdapter(mAdapter);
// 计算总价格并获取结果
double totalAmount = mAdapter.calculateTotalAmount();
Log.d("MainActivity", "Total amount: " + totalAMount);
}
}
这样就能够在外部获取到计算后的总价格了。
【相关推荐】
根据你的打印
这应该是两个任务执行顺序的先后问题
你在创建adpater的activity或者fragment等其他parent布局中,先执行了外部打印,然后才是adapter的数据刷新,执行了内部打印