Как позвонить и установить значение из другой деятельности в мою деятельность?

У меня есть действие под названием "PurcahseActivity", и там отображается стоимость транзакций пользователя. "ВСЕГО: € 1138,50" на прилагаемой картинке. Значение генерируется после того, как пользователь совершил покупку.

У меня есть другое действие под названием "SalesReportActivity", и здесь мне нужно отобразить то же значение в этом макете.

Каков наилучший способ достичь этого?

Это мой PurchaseLayout.xml. 'net_total' - это идентификатор отображаемого значения.

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="64dp"
    android:layout_gravity="center_horizontal" >

    <LinearLayout
        android:id="@+id/net_total_value"
        android:layout_width="85dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="5dp"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/net_total"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="right"
            android:textColor="@color/dark_grey_standard_text"
            android:textSize="15sp"
            android:textStyle="bold" />
    </LinearLayout>

</TableRow>

Я много исследовал, но не смог найти решения для этого конкретного вопроса. По сути, я просто хочу отобразить то же значение в моем salesReport.

3 ответа

Самый простой способ сделать это:

  1. В PurcahseActivity после того, как пользователь совершил покупку, сохраните это значение в sharedPreferences.

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    sharedPreferences.edit().putFloat("total", value).apply();
    
  2. В SalesReportActivity загрузите это значение:

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    float value = sharedPreferences.getFloat("total", 0f);
    

Я знаю 3 способа, которые могут вам помочь:

  • Если вы начинаете второе действие после первого, вы можете использовать Intent.putExtra и получить это значение во втором упражнении
  • Если это значение будет использоваться повторно более чем в 1 месте, имеет смысл сохранить его в SharedPreferences а затем получить его там, где это необходимо
  • Если вы хотите асинхронно получать и отправлять это значение между любыми двумя компонентами, но у вас нет желания его сохранять, вы можете использовать большую библиотеку под названием EventBus

Я не дал вам никакого кода, так как каждый из этих трех методов хорошо известен и много раз объяснялся. Вы всегда можете узнать самостоятельно, как пользоваться SharedPreferences а также Intents, Насколько EventBus идет, у него есть отличная документация, но если у вас все еще были проблемы с его использованием, не стесняйтесь пинговать меня или написать вопрос здесь.

Обычный способ передачи информации через действие - использование Intent при запуске действия. В исходной активности,

Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra("YOUR_FLAG", yourValue);
startActivity(intent);

И затем в вашей TargetActivity, например, в onCreate(...)

float yourValue;
Bundle extras = getIntent().getExtras();
if (extras != null) {
    yourValue = extras.getFloat("YOUR_FLAG");
}

Чтобы сохранить ваши данные в более чем 2 действиях, используйте SharedPreferences. Существуют и другие подходы, такие как база данных, файл или даже EventBus, если требуется более сложное решение.

Другие вопросы по тегам