Как позвонить и установить значение из другой деятельности в мою деятельность?
У меня есть действие под названием "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 ответа
Самый простой способ сделать это:
В PurcahseActivity после того, как пользователь совершил покупку, сохраните это значение в sharedPreferences.
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); sharedPreferences.edit().putFloat("total", value).apply();
В 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, если требуется более сложное решение.