如何检查用户是否多次单击按钮?

问题描述 投票:-2回答:1

我想让“已应用”吐司在用户多次单击按钮时出现。现在发生的是,当用户第一次单击按钮时,仍显示“已应用”的吐司。我不希望这种情况发生。我希望仅当用户单击一次它时显示它。我不确定该怎么做。我尝试了以下操作,但是它没有按我的预期工作。如果有人指出我正确的方向,我将不胜感激。

package com.example.oddsynew;

import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import com.google.android.material.navigation.NavigationView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;

public class JobInfo extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    TextView jobName, jobCharge, jobLocation, jobDate, jobTime, jobDesc, jobTasks, addPref, recruiterName;
    ImageView profPic;
    String jobname, jobloc, jobcharge, profpic, startdate, enddate, starttime, endtime, jobdesc, jobtasks, addpref, recruitername, userID, jobID;
    ImageButton menuIcon;
    Button requestForHireBtn;
    DatabaseReference rootRef, appliedJobsRef, jobNameRef;
    FirebaseAuth mAuth;
    FirebaseUser u;
    DrawerLayout drawer;
    NavigationView navigationView;
    Query query;
    Boolean appliedFirstTime;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_job_info);

        drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        menuIcon = (ImageButton) findViewById(R.id.menuIcon);
        requestForHireBtn = (Button) findViewById(R.id.requestedBtn);
        navigationView = (NavigationView) findViewById(R.id.hamburger_menu);
        navigationView.setNavigationItemSelectedListener(this);
        navigationView.setCheckedItem(R.id.nav_home);


        menuIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                drawer.openDrawer(GravityCompat.START);
            }
        });

        jobName = (TextView) findViewById(R.id.jobName_info);
        jobCharge = (TextView) findViewById(R.id.jobCharge_info);
        jobLocation = (TextView) findViewById(R.id.jobLocation_info);
        profPic = (ImageView) findViewById(R.id.prof_pic_info);
        jobDate = (TextView) findViewById(R.id.jobDate_info);
        jobTime = (TextView) findViewById(R.id.jobTime_info);
        jobDesc = (TextView) findViewById(R.id.jobDesc);
        jobTasks = (TextView) findViewById(R.id.jobTasks);
        addPref = (TextView) findViewById(R.id.additionalPref);
        recruiterName = (TextView) findViewById(R.id.recruiterName_info);

        jobname = getIntent().getStringExtra("jobName");
        jobloc = getIntent().getStringExtra("jobLocation");
        jobcharge = getIntent().getStringExtra("jobCharge");
        profpic = getIntent().getStringExtra("profPic");
        startdate = getIntent().getStringExtra("startDate");
        enddate = getIntent().getStringExtra("endDate");
        starttime = getIntent().getStringExtra("startTime");
        endtime = getIntent().getStringExtra("endTime");
        jobdesc = getIntent().getStringExtra("jobDesc");
        jobtasks = getIntent().getStringExtra("jobTasks");
        addpref = getIntent().getStringExtra("addPref");
        recruitername = getIntent().getStringExtra("recruiterName");
        jobID = getIntent().getStringExtra("jobID");

        jobName.setText(jobname);
        jobCharge.setText(jobcharge);
        jobLocation.setText(jobloc);
        jobDate.setText(startdate + " - " + enddate);
        jobTime.setText(starttime + " - " + endtime);
        jobDesc.setText(jobdesc);
        jobTasks.setText(jobtasks);
        addPref.setText(addpref);
        recruiterName.setText(recruitername);

        Picasso.get().load(profpic).into(profPic);

        appliedFirstTime = false;

        requestForHireBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                mAuth = FirebaseAuth.getInstance();
                u = mAuth.getCurrentUser();
                userID = u.getUid();
                rootRef = FirebaseDatabase.getInstance().getReference();
                appliedJobsRef = rootRef.child("Users").child(userID).child("Applied Jobs").push();
                jobNameRef = rootRef.child("Users").child(userID).child("Applied Jobs");

                jobNameRef.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        query = jobNameRef.orderByChild("jobID").equalTo(jobID);

                        query.addValueEventListener(new ValueEventListener() { // I need help in this section
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                if (appliedFirstTime = true) {
                                    if (dataSnapshot.exists()) {
                                        Toast.makeText(JobInfo.this, "Already applied", Toast.LENGTH_SHORT).show();
                                    }
                                } else {
                                    appliedJobsRef.child("jobID").setValue(jobID);
                                    appliedJobsRef.child("job_name").setValue(jobname);
                                    appliedJobsRef.child("job_location").setValue(jobloc);
                                    appliedJobsRef.child("recruiter_name").setValue(recruitername);
                                    appliedJobsRef.child("job_charge").setValue(jobcharge);
                                    appliedJobsRef.child("profile_pic").setValue(profpic);
                                    appliedJobsRef.child("start_date").setValue(startdate);
                                    appliedJobsRef.child("end_date").setValue(enddate);
                                    appliedJobsRef.child("start_time").setValue(starttime);
                                    appliedJobsRef.child("end_time").setValue(endtime);
                                    appliedJobsRef.child("job_desc").setValue(jobdesc);
                                    appliedJobsRef.child("job_tasks").setValue(jobtasks);
                                    appliedJobsRef.child("add_pref").setValue(addpref);
                                    requestForHireBtn.setText("Request Sent!");
                                    appliedFirstTime = true;
                                    requestForHireBtn.setEnabled(false);
                                }
                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {
                                Toast.makeText(JobInfo.this, "Error", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
                        Toast.makeText(JobInfo.this, "Error", Toast.LENGTH_SHORT).show();
                    }
                });

            }
        });


    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.nav_home:
                Intent intent = new Intent(JobInfo.this, Home.class);
                startActivity(intent);
                break;

            case R.id.nav_gigs:
                Intent intent2 = new Intent(JobInfo.this, MyGigs.class);
                startActivity(intent2);
                break;
        }
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}
android android-toast
1个回答
0
投票

基本上做到这一点非常简单,您可以提出自己的实现,但是还有另一种先进的方法。让我们一起经历它们。

使用您自己的实现。使用boolean变量跟踪点击,并向用户显示适当的消息。

boolean isRequestForHireBtnPressed = false;


requestForHireBtn.setOnClickListener(new View.OnClickListener() {
   if(isRequestForHireBtnPressed){
      // Show relevant toast to user
   }else{
      // Handle your use-case on user click and set isRequestForHireBtnPressed
      isRequestForHireBtnPressed = true;
   }
});

这是处理此问题的最简单方法。使用RxViews可以实现另一种高级方法。有关更多信息,请参见RxViews的文档。希望这会对您有所帮助,并朝正确的方向发展。祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.