【问题标题】:How to send values to two different activities at the same time如何同时向两个不同的活动发送值
【发布时间】:2016-04-05 05:31:12
【问题描述】:

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



            }
        });
    }


}

【问题讨论】:

  • 使用共享偏好
  • 您也可以使用本地广播。

标签: android graph android-graphview


【解决方案1】:

我不确定您在这里期待什么,但 onActivityResult 用于获取使用 startActivityForResult 启动 Activity 的结果,并且只会在名为 startActivityForResult 的 Activity 中调用。

由于活动一次只处于活动状态(除非您的目标是 N 预览),因此您必须使用启动意图将结果数据传递给另一个活动。

【讨论】:

    【解决方案2】:

    使用BroadcastReceiver 将BroadcastReceiver 注册到两个活动并在您要发送数据时触发BroadcastReceiver。使用 LocalBroadcastManager

    创建广播接收器的示例代码

    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);
    }
    

    【讨论】:

      【解决方案3】:

      我不知道你到底想要什么,你是否尝试过“静态”的费用和

      selectedCheckBox 变量。然后您可以轻松地从任何地方获取值或使用

      共享偏好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 2020-09-21
        • 1970-01-01
        • 1970-01-01
        • 2016-12-02
        • 1970-01-01
        相关资源
        最近更新 更多