我在一个 activity 中有两个按钮,如果按下第一个按钮,则应禁用另一个 activity 中的两个按钮

I have two buttons in one activity, if first button is pressed then two buttons from another activity should be disabled

我在名为 "Selection" 的 activity 中有两个按钮 "Employee" 和 "Employer",如果 "Employee" 按钮被按下,那么两个按钮 "addEmployee" 和来自 "Home" activity 的 "generateReport" 应该被禁用。

选择Activity

public class Selection extends AppCompatActivity {

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

    final Button btn_Employee = (Button) findViewById(R.id.btn_Employee);
    Button btn_Employer = (Button) findViewById(R.id.btn_Employer);

    btn_Employee.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View vEmployee) {
            if(btn_Employee.isPressed())
            {
                //markAttendance and generateReport button should be disabled

                Intent i = new Intent(Selection.this, HomeActivity.class);
                             startActivity(i);
            }

    }
    });

    btn_Employer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View vEmployer) {

        }
    });
}
}

首页Activity

public class HomeActivity extends AppCompatActivity implements View.OnClickListener {

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

    ImageButton markAttendance = (ImageButton) findViewById(R.id.markAttendance);
    ImageButton viewHolidays = (ImageButton) findViewById(R.id.viewHolidays);
    ImageButton addEmployee = (ImageButton) findViewById(R.id.addEmployee);
    ImageButton generateReport = (ImageButton) findViewById(R.id.generateReport);

    Toolbar toolbar = (Toolbar) findViewById(R.id.sign_in_toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle(getTitle());

    markAttendance.setOnClickListener(this);
    viewHolidays.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            holidays();
        }
    });
  addEmployee.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
            AddEmployee();
      }
  });
   generateReport.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           report();
       }
   });
}

private void AddEmployee() {
    Intent addIntent =  new Intent(this, EmployeeDetails.class);
    startActivity(addIntent);
}

private void report() {
    Intent webIntent = new Intent(this, TempWeb.class);
    startActivity(webIntent);
}

private void holidays() {
Intent holidayIntent = new Intent(this, Holiday.class);
    startActivity(holidayIntent);
}

@Override
public void onClick(View v) {
    attendance();
}

private void attendance() {
    Intent attendanceIntent = new Intent(this, MarkAttendance.class);
    startActivity(attendanceIntent);
}
}

感谢任何帮助!

只需将 Intent 中按下的按钮传递给 Home activity 并在家中 activity 从 intent 中获取数据并使用 if 条件应用按钮的禁用。

因此,如果您的主页 Activity 仅通过选择 activity 打开,那么您可以使用 Intents 传递此数据,否则您可以使用 SharedPreference 保存数据,然后在您的主页 activity.

要通过 Intent 传递数据和检索数据,请参阅此处 - Passing Through intent

要通过共享首选项存储和检索,请参阅此处 - Shared Preference

通过 Intent 传递一个值来检查调用了哪个按钮

btn_Employee.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View vEmployee) {
        if(btn_Employee.isPressed())
        {
            //markAttendance and generateReport button should be disabled

            Intent i = new Intent(Selection.this, HomeActivity.class);
              i.putExtra("BUTTON_CLICK","EMPLOYEE");
                         startActivity(i);
        }

}
});

btn_Employer.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View vEmployer) {


            Intent i = new Intent(Selection.this, HomeActivity.class);
              i.putExtra("BUTTON_CLICK","EMPLOYER");
                         startActivity(i);
    }
});

然后在家中 activity 获得意向值

String buttonValue = getIntent().getStringExtra("BUTTON_CLICK");

选择Activity

btn_Employee.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View vEmployee) {
        if(btn_Employee.isPressed())
        {
            //markAttendance and generateReport button should be disabled

            Intent i = new Intent(Selection.this, HomeActivity.class);
                         startActivity(i).putExtra("addEmployee", false).putExtra("reports", false));
        }

}
});

首页Activity

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

ImageButton markAttendance = (ImageButton) findViewById(R.id.markAttendance);
ImageButton viewHolidays = (ImageButton) findViewById(R.id.viewHolidays);
ImageButton addEmployee = (ImageButton) findViewById(R.id.addEmployee);
ImageButton generateReport = (ImageButton) findViewById(R.id.generateReport);

Toolbar toolbar = (Toolbar) findViewById(R.id.sign_in_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(getTitle());

//getExtra value
boolean addEmployee = getIntent().getBooleanExtra("addEmployee", false);
boolean reports = getIntent().getBooleanExtra("reports", false);

if(addEmployee){
    addEmployee.setEnable(false);
}

if(reports){
    generateReport.setEnable(false);
}

}

两个 class 之间没有 Intent 的交互:

像这样创建助手 class :

public class ChangeButtonStatusHelper {

    public interface ChangeButtonsListener{
        void twoButtonsDisabled();
    }

    public static ChangeButtonStatusHelper mInstance;

    private ChangeButtonsListener mListener;

    private boolean mState;

    private ChangeButtonStatusHelper(){
        //do nothing
    }

    public static ChangeButtonStatusHelper getInstance(){
        if(mInstance == null){
            mInstance = new ChangeButtonStatusHelper();
        }

        return  mInstance;
    }


    public void setListener(ChangeButtonsListener mListener){
        this.mListener = mListener;
    }

    public void stateChange(boolean mState){
        if(mListener!=null){
            this.mState = mState;
            notifyStateChange();
        }
    }

    public boolean getState(){
        return mState;
    }

    private void notifyStateChange() {
        mListener.onPriorityChanged();
    }

}

onCreate () of HomeActivity.class

中写下代码
ChangeButtonStatusHelper.getInstance().setListener(new ChangeButtonsListener.twoButtonsDisabled() {
        @Override
        public void onPriorityChanged() {

            if (ChangeButtonStatusHelper.getInstance().getState()) {

                **Disable your buttons here**
            }

        }
    });

SelectionActivity.class

btn_Employee.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View vEmployee) {
            if(btn_Employee.isPressed())
            {
                //markAttendance and generateReport button should be disabled

                 ChangeButtonStatusHelper.getInstance().stateChange(true);
            }

    }
    });

你可以通过你的意图传递一些数据来做到这一点,这些数据可以在 Home Acitivity 中识别,在 Selection Activity 中按下了哪个按钮。

在选择中 Activity 按下员工按钮:

Intent i = new Intent(Selection.this, HomeActivity.class);
intent.putExtra("IS_EMPLOYEE", true);
startActivity(i);

在主页Activity检查员工按钮是否按下,并相应地做一些事情:

if(getIntent().getExtras().getBoolean("IS_EMPLOYEE")){
    // do what you want to do on employee button press.
}
else{
    // do what you want to do on employer button press.
}

Selection Activity 按下雇主按钮时,也通过 intent 传递 false 值。

onClickListener

中对要禁用的按钮使用 setEnabled(false)

如果您想知道按钮是否 selected/pressed 更易用,您可以使用按钮的 setSelected(true)(或 false)功能,这样您就可以随时询问它如果它被选中

希望对您有所帮助:)

//In Selection Activity
btn_Employee.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View vEmployee) {
        if(btn_Employee.isPressed())
        {
            //markAttendance and generateReport button should be disabled

            Intent i = new Intent(Selection.this, HomeActivity.class);
            i.putExtra("IsEmployeeBtnPressd",true);
                         startActivity(i);

        }

}


// In Home Activity.
class HomeActivity extends  extends AppCompatActivity {
 @Override
 oncreate(Bundle bundle){
 ImageButton markAttendance = (ImageButton) findViewById(R.id.markAttendance);
 ImageButton generateReport = (ImageButton) findViewById(R.id.generateReport)
  boolean isEmployeeBtnPressed=getIntent().getBooleanExtra("IsEmployeeBtnPressd",false);
  if(isEmployeeBtnPressed){
     //You should disable
      markAttendance.setEnabled(false);
      generateReport.setEnabled(false); 
   }
 }

}

如果您不想通过 Intent 就可以做到这一点,您可以通过注册到 OnSharedPreferenceChangeListener 来实现此行为。这是一个例子:

HomeActivity.java:

public class HomeActivity extends AppCompatActivity implements View.OnClickListener, 
SharedPreferences.OnSharedPreferenceChangeListener{

    public static final String BTN_EMPLOYEE_PREFS_TAG = "employeeTag";
    private ImageButton addEmployee;
    private ImageButton generateReport;
    private SharedPreferences prefs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        addEmployee = (ImageButton) findViewById(R.id.addEmployee);
        generateReport = (ImageButton) findViewById(R.id.generateReport);
        .
        .
        .
        prefs = PreferenceManager.getDefaultSharedPreferences(this);
        prefs.registerOnSharedPreferenceChangeListener(this);
        .
        .
        .
     }


    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

        if(BTN_EMPLOYEE_PREFS_TAG.equals(key)){
        // listens to any changes made on this tag
            boolean enableOrDisable = prefs.getBoolean(BTN_EMPLOYEE_PREFS_TAG, false);
            addEmployee.setEnabled(enableOrDisable);
            generateReport.setEnabled(enableOrDisable);
        }
    }
    .
    .
    .
}

Selection.java:

public class Selection extends AppCompatActivity{

    private SharedPreferences prefs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_selection);
        prefs = PreferenceManager.getDefaultSharedPreferences(this);

        findViewById(R.id.btn_Employee).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View vEmployee) {
                if(btn_Employee.isPressed()){
                    prefs.edit().putBoolean(BTN_EMPLOYEE_PREFS_TAG, false).apply();
                    // rest of your logic goes here.
                }
            }
        });
        .
        .
        .
    }
    .
    .
    .
}