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,

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