AtomicReferences для навигации по содержанию и активности в вспомогательном файле
В моем приложении я перемещаюсь между 5 различными экранами, каждый на своем activity
, Почти любой activity
можно позвонить с любого другого activity
поэтому я пытаюсь создать вспомогательный файл для управления intents
так что у меня нет избыточного кода.
Я создал вспомогательный файл с public static
методы и передать деятельность context
и любые необходимые данные при вызове этих методов. Кажется, это работает нормально на моем устройстве (Samsung Galaxy S5), но Android Studio рекомендует сделать мои намерения AtomicReference в моем файле помощника.
Можете ли вы помочь мне понять, если и почему это должно быть AtomicReference<Intent>
?
Кроме того, уместно ли пройти context
в файл помощника, чтобы сделать эти вызовы?
ActivityHelper файл:
public class ActivityHelper {
private ActivityHelper() {}
public static void startAddNewMealActivity(Context context) {
Intent newMealIntent = new Intent(context, MealEditActivity.class);
context.startActivity(newMealIntent);
}
public static void startMealListActivity(Context context) {
Intent intent = new Intent(context, MealListActivity.class);
context.startActivity(intent);
}
public static void startEditMealActivity(Context context, FBMeal meal, String mealFBKey) {
Intent intent = new Intent(context, MealEditActivity.class);
intent.putExtra(Constants.INTENT_FB_KEY_EXTRA_TAG, mealFBKey);
intent.putExtra(Constants.INTENT_MEAL_EXTRA_TAG, meal);
context.startActivity(intent);
}
public static void startEditLastMealActivity(final Context context) {
FBHelper.getQueryForMostRecentMeal().addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (FBHelper.isExistingDataSnapshop(dataSnapshot)) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
FBMeal selectedMeal = snapshot.getValue(FBMeal.class);
String selectedMealId = snapshot.getKey();
startEditMealActivity(context, selectedMeal, selectedMealId);
}
} else {
Utils.showToastFromStringResource(R.string.no_meals, context);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Utils.showToastFromStringResource(R.string.error_getting_meal, context);
}
});
}
}
Пример вызова вспомогательного файла из меню в AppCompatActivity:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.edit_meal_menu:
ActivityHelper.startEditMealActivity(this, meal, mealFBKey);
return true;
case R.id.edit_last_entry_menu:
ActivityHelper.startEditLastMealActivity(this);
return true;
case R.id.about_menu:
DialogFragment newFragment = AboutDialog.newInstance();
newFragment.show(getFragmentManager(), "about");
default:
return super.onOptionsItemSelected(item);
}
}
1 ответ
Я не вижу никакой причины, почему вы должны использовать AtomicReference
в любом из ваших static
методы.
Другой подход заключается в создании BaseActivity
класс, который расширяется AppCompatActivity
и включает в себя все ваши вспомогательные методы. Все ваши действия должны быть расширены BaseActivity
, В этом случае вам не нужно будет проходить Context
ко всем этим вспомогательным методам, поскольку вспомогательные методы будут нестатичными и могут просто использовать this
как Context
,