我在一个 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.
}
}
});
.
.
.
}
.
.
.
}
我在名为 "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.
}
}
});
.
.
.
}
.
.
.
}