我正在制作一个预算应用,并且无法将我的费用用于创建图表的课程。用户将能够输入费用以及指示他们花钱的复选框。当我将值发送给MainActivity时,它会读取费用并显示更新的预算,但是,当我尝试在我的类中读取它将生成图表时,图表显示为空并且不读取值。这是我的费用活动(屏幕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();
}
});
}
}
答案 0 :(得分:1)
我不确定你在这里期待什么,但onActivityResult用于获取使用startActivityForResult启动Activity的结果,并且只会在调用startActivityForResult的活动中调用。
由于活动一次只有一个活动(除非您的目标是N预览),您必须使用开始意图将结果数据传递给其他活动。
答案 1 :(得分:0)
使用BroadcastReceiver
将BroadcastReceiver注册到两个活动,并在要发送数据时触发BroadcastReceiver。使用 LocalBroadcastManager
创建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);
}
答案 2 :(得分:0)
我不确切地知道你想要什么,你是否尝试过"静态"费用和
selectedCheckBox变量。然后您可以轻松地从任何位置获取值或使用
共享偏好。