Android Studio中如何在支付成功后永久隐藏Razorpay支付按钮
实现支付成功后永久隐藏Razorpay支付按钮
要解决支付成功后重启/返回应用仍显示支付按钮的问题,核心是持久化存储支付状态,确保每次页面启动时能读取状态并动态控制按钮显示。以下是具体修改方案:
核心实现步骤
1. 初始化SharedPreferences用于状态存储
在onCreate中初始化轻量存储工具SharedPreferences,并启动时检查支付状态:
private SharedPreferences sharedPreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_details); ScroolBtn = findViewById(R.id.scrollviewid); RazerPayButn = findViewById(R.id.razorpay); // 初始化私有模式的SharedPreferences,命名为PaymentStatus sharedPreferences = getSharedPreferences("PaymentStatus", MODE_PRIVATE); // 页面启动时自动检查支付状态,设置按钮显示逻辑 checkPaymentStatus(); }
2. 添加支付状态检查方法
编写方法读取存储的状态,控制按钮和内容区域的可见性:
private void checkPaymentStatus() { // 默认未支付,读取已存储的支付状态 boolean isPaymentSuccess = sharedPreferences.getBoolean("is_paid", false); if (isPaymentSuccess) { RazerPayButn.setVisibility(View.GONE); ScroolBtn.setVisibility(View.VISIBLE); } else { RazerPayButn.setVisibility(View.VISIBLE); ScroolBtn.setVisibility(View.GONE); } }
3. 支付成功时持久化状态
在onPaymentSuccess回调中标记支付成功并保存,同时更新UI:
@Override public void onPaymentSuccess(String s) { Log.d("ONSUCCESS", "onPaymentSuccess: " + s); // 持久化支付成功状态 SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putBoolean("is_paid", true); editor.apply(); // 异步保存,性能更优 // 更新UI显示 RazerPayButn.setVisibility(View.GONE); ScroolBtn.setVisibility(View.VISIBLE); }
4. 修正点击事件逻辑
移除原点击事件中直接隐藏按钮的代码,避免支付失败后错误隐藏按钮:
public void onClick(View v){ startPayment(); Toast.makeText(this, "Please wait...", Toast.LENGTH_SHORT).show(); // 移除直接修改可见性的代码,仅在支付成功后处理 }
额外优化(针对多书籍场景)
如果你的项目支持多本电子书,需要为每本书设置唯一的状态key,避免不同书籍的支付状态互相覆盖:
// 假设书籍ID为bookId(String或int类型) String paymentStatusKey = "is_paid_" + bookId; // 存储时使用该key editor.putBoolean(paymentStatusKey, true); // 读取时也使用对应key boolean isPaid = sharedPreferences.getBoolean(paymentStatusKey, false);
内容的提问来源于stack exchange,提问作者sudo kiko
相关产品推荐
相关产品推荐

