You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:24:21