android viewholder传值失败

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 生成】

问题分析: 问题出现在CartAdapteronBindViewHolder方法中,onBindViewHolder方法是在每个ViewHolder被绑定到RecyclerView时被调用的方法,而getTotalAmount方法是在外部调用的,所以在调用getTotalAmount方法时,可能还没有执行到onBindViewHolder方法,导致获取到的totalamount还是初始值0。

解决方案: 可以修改代码,将计算总价格的逻辑放在外部,在外部维护一个全局变量或方法来获取总价格。

可以在ActivityFragment中调用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中调用CartAdaptercalculateTotalAmount方法:

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的数据刷新,执行了内部打印