Как изменить вид после того, как пользователь нажал на кнопку и документ Firestore обновился? - PullRequest
1 голос
/ 17 октября 2019

Таким образом, в основном, когда пользователь приходит к «премиум» активности в моем приложении, он видит кнопку с надписью «Покупка премиум». Когда он щелкает по нему, документ в Firestore обновляется (логическое значение от false до true), кнопка исчезает, и вместо кнопки появляется TextView. Когда пользователь переходит обратно к MainActivity и оттуда снова к операции «Premium», он снова видит кнопку «Купить премиум», которую я не хочу, потому что он уже «купил» ее. Вопрос в том, как мне добиться того, чтобы, когда пользователь нажимает кнопку, вид макета изменился навсегда, поэтому, когда пользователь возвращается к действию, он больше не сможет совершить покупку. Я не хочу, чтобы он видел кнопку.

Должен ли я использовать логическое значение (премиум-член: true), которое изменилось в документе в Firestore после того, как он щелкнул по нему, чтобы сделать это? Например: если в документе написано «Премиум-членство: истина», видимость кнопки «установить» пропала и т. Д. Это приведет к «чтению» Firestore каждый раз, когда пользователь переходит к «Деятельности», есть ли лучший способ?

Вот мойonClickListener кнопки покупки:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_premium_purchase);

        purchase = findViewById(R.id.card_view_premium_purchase);
        premiumTextView = findViewById(R.id.premium_purchase_success);

        premiumTextView.setVisibility(View.GONE);

        purchase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

                String username = user.getDisplayName();

                DocumentReference userRef = db.collection("User").document(username);

                // Set the "pro membership" to true
                userRef
                        .update("pro membership", true).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "DocumentSnapshot successfully updated!");
                        Toast.makeText(PremiumPurchaseActivity.this, "Guess Premium successfully bought", Toast.LENGTH_SHORT).show();
                        premiumTextView.setVisibility(View.VISIBLE);
                        purchase.setVisibility(View.GONE);
                    }
                })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Log.w(TAG, "Error updating document", e);
                            }
                        });
            }
        });
    }

1 Ответ

1 голос
/ 17 октября 2019

На самом деле, все очень просто, все, что вам нужно сделать, это получить текущее значение поля "pro member" из DocumentRefernce и соответствующим образом обработать пользовательский интерфейс в вашем методе onResume.

@Override
public void onResume(){
super.onResume();
String username = user.getDisplayName();

DocumentReference userRef =  db.collection("User").document(username);

userRef.get().addOnCompleteListener(new 
                 OnCompleteListener<DocumentSnapshot>() {
              @Override
                 public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                    if (task.isSuccessful()) {
                        DocumentSnapshot document = task.getResult();
                        if (document != null) {

                        boolean membership = document.getBoolean("pro membership");
                        if(membership){
                           premiumTextView.setVisibility(View.VISIBLE);
                           purchase.setVisibility(View.GONE);
                            }

                           } else {
                            Log.d("LOGGER", "No such document");
                              }
                           } else {
                            Log.d("LOGGER", "get failed with ", 
                            task.getException());
                           }
                        }
                       });

                     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...