如何同时向两个不同的活动发送值
How to send values to two different activities at the same time
我正在开发一个预算应用程序,但无法将我的费用计入将创建图表的 class。用户将能够输入费用以及指示他们花钱的复选框。当我将值发送到 MainActivity 时,它会读取费用并显示更新后的预算,但是,当我尝试在我的 class 中读取它来制作图表时,图表显示为空并且没有读取值。这是我的费用 Activity(屏幕 2):
public class ExpensesActivity extends AppCompatActivity {
EditText editTextExpense;
Expenses expenses;
String selectedCheckBox;
CheckBox personalCheckBox;
CheckBox commuteCheckBox;
CheckBox billsCheckBox;
CheckBox funCheckBox;
CheckBox workCheckBox;
CheckBox foodCheckBox;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_expenses);
editTextExpense = (EditText)findViewById(R.id.moneySpent);
personalCheckBox = (CheckBox)findViewById(R.id.personalCheckBox);
commuteCheckBox = (CheckBox)findViewById(R.id.commuteCheckBox);
billsCheckBox = (CheckBox)findViewById(R.id.billsCheckBox);
funCheckBox = (CheckBox)findViewById(R.id.funCheckBox);
workCheckBox = (CheckBox)findViewById(R.id.workCheckBox);
foodCheckBox = (CheckBox)findViewById(R.id.foodCheckBox);
backToMainMenu();
}
public void backToMainMenu() {
final Button expenseButton = (Button)findViewById(R.id.addExpenseSecondScreen);
expenseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (personalCheckBox.isChecked()) {
selectedCheckBox = personalCheckBox.getText().toString();
}
if (commuteCheckBox.isChecked()) {
selectedCheckBox = commuteCheckBox.getText().toString();
}
if (billsCheckBox.isChecked()) {
selectedCheckBox = billsCheckBox.getText().toString();
}
if (funCheckBox.isChecked()) {
selectedCheckBox = funCheckBox.getText().toString();
}
if (workCheckBox.isChecked()) {
selectedCheckBox = workCheckBox.getText().toString();
}
if (foodCheckBox.isChecked()) {
selectedCheckBox = foodCheckBox.getText().toString();
}
float expense = Float.parseFloat(editTextExpense.getText().toString());
Intent intent = getIntent();
intent.putExtra("expense", expense);
intent.putExtra("checkBoxText", selectedCheckBox);
setResult(RESULT_OK, intent);
finish();
}
});
}
}
使用 BroadcastReceiver
将 BroadcastReceiver 注册到 activity 并在您要发送数据时触发 BroadcastReceiver。使用 LocalBroadcastManager
sample code to create BroadcastReceiver
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
}
}
registerReceiver(receiver, filter);
并在 onDestroy()
中注销
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
我不确定您在这里期待什么,但是 onActivityResult 用于通过使用 startActivityForResult 启动 Activity 来获取结果,并且只会在调用 startActivityForResult 的 activity。
由于一次只有一个活动处于活动状态(除非您针对 N 预览),因此您必须使用开始意图将结果数据传递给另一个 activity。
我不知道你到底想要什么,你试过"static"费用和
selectedCheckBox variables.Then 您可以轻松地从任何地方获取值或使用
共同偏好。
我正在开发一个预算应用程序,但无法将我的费用计入将创建图表的 class。用户将能够输入费用以及指示他们花钱的复选框。当我将值发送到 MainActivity 时,它会读取费用并显示更新后的预算,但是,当我尝试在我的 class 中读取它来制作图表时,图表显示为空并且没有读取值。这是我的费用 Activity(屏幕 2):
public class ExpensesActivity extends AppCompatActivity {
EditText editTextExpense;
Expenses expenses;
String selectedCheckBox;
CheckBox personalCheckBox;
CheckBox commuteCheckBox;
CheckBox billsCheckBox;
CheckBox funCheckBox;
CheckBox workCheckBox;
CheckBox foodCheckBox;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_expenses);
editTextExpense = (EditText)findViewById(R.id.moneySpent);
personalCheckBox = (CheckBox)findViewById(R.id.personalCheckBox);
commuteCheckBox = (CheckBox)findViewById(R.id.commuteCheckBox);
billsCheckBox = (CheckBox)findViewById(R.id.billsCheckBox);
funCheckBox = (CheckBox)findViewById(R.id.funCheckBox);
workCheckBox = (CheckBox)findViewById(R.id.workCheckBox);
foodCheckBox = (CheckBox)findViewById(R.id.foodCheckBox);
backToMainMenu();
}
public void backToMainMenu() {
final Button expenseButton = (Button)findViewById(R.id.addExpenseSecondScreen);
expenseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (personalCheckBox.isChecked()) {
selectedCheckBox = personalCheckBox.getText().toString();
}
if (commuteCheckBox.isChecked()) {
selectedCheckBox = commuteCheckBox.getText().toString();
}
if (billsCheckBox.isChecked()) {
selectedCheckBox = billsCheckBox.getText().toString();
}
if (funCheckBox.isChecked()) {
selectedCheckBox = funCheckBox.getText().toString();
}
if (workCheckBox.isChecked()) {
selectedCheckBox = workCheckBox.getText().toString();
}
if (foodCheckBox.isChecked()) {
selectedCheckBox = foodCheckBox.getText().toString();
}
float expense = Float.parseFloat(editTextExpense.getText().toString());
Intent intent = getIntent();
intent.putExtra("expense", expense);
intent.putExtra("checkBoxText", selectedCheckBox);
setResult(RESULT_OK, intent);
finish();
}
});
}
}
使用 BroadcastReceiver
将 BroadcastReceiver 注册到 activity 并在您要发送数据时触发 BroadcastReceiver。使用 LocalBroadcastManager
sample code to create BroadcastReceiver
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
}
}
registerReceiver(receiver, filter);
并在 onDestroy()
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
我不确定您在这里期待什么,但是 onActivityResult 用于通过使用 startActivityForResult 启动 Activity 来获取结果,并且只会在调用 startActivityForResult 的 activity。
由于一次只有一个活动处于活动状态(除非您针对 N 预览),因此您必须使用开始意图将结果数据传递给另一个 activity。
我不知道你到底想要什么,你试过"static"费用和
selectedCheckBox variables.Then 您可以轻松地从任何地方获取值或使用
共同偏好。