1

在我的应用程序中,我在大约 5 个不同的屏幕之间导航,每个屏幕都有自己的activity. 几乎任何东西activity都可以从任何其他地方调用activity,所以我正在尝试构建一个帮助文件来管理它,intents这样我就没有多余的代码。

我用方法构建了一个帮助文件,并在调用这些方法时public static传递了活动和任何所需的数据。context这似乎在我的设备(三星 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);
    }
}
4

1 回答 1

1

我根本看不出为什么您需要AtomicReference在任何static方法中使用 an 。

另一种方法是创建一个BaseActivity扩展AppCompatActivity并包含所有辅助方法的类。然后,您的所有活动都应该扩展BaseActivity。在这种情况下,您不需要将 a 传递Context给所有这些辅助方法,因为辅助方法将是非静态的,并且可以只使用thisas Context

于 2016-12-24T23:11:49.167 回答