如何同时向两个不同的活动发送值

时间:2016-04-05 05:31:12

标签: android graph android-graphview

我正在制作一个预算应用,并且无法将我的费用用于创建图表的课程。用户将能够输入费用以及指示他们花钱的复选框。当我将值发送给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();



            }
        });
    }


}

3 个答案:

答案 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变量。然后您可以轻松地从任何位置获取值或使用

共享偏好。