1

私のアプリでは、約 5 つの異なる画面間を移動し、それぞれが独自のactivity. ほとんどすべてactivityの を他の から呼び出すことができるので、冗長なコードを持たないようにactivityを管理するヘルパー ファイルを作成しようとしています。intents

メソッドを含むヘルパー ファイルを作成し、これらのメソッドを呼び出すときにpublic staticアクティビティcontextと必要なデータを渡します。これは私のデバイス (Samsung Galaxy S5) で正常に動作しているように見えますが、Android Studio では、ヘルパー ファイルでインテントを AtomicReference にすることをお勧めします。

これらが必要かどうか、またその理由を理解するのを手伝ってもらえますAtomicReference<Intent>か?

contextまた、これらの呼び出しを行うためにヘルパー ファイルに渡すことは適切ですか?

アクティビティヘルパー ファイル:

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

もう 1 つの方法は、すべてのヘルパー メソッドBaseActivityを拡張して含めるクラスを作成することです。AppCompatActivityその後、すべてのアクティビティが拡張されBaseActivityます。その場合、Contextこれらのヘルパー メソッドのすべてに a を渡す必要はありません。ヘルパー メソッドは静的ではなく、単にthisas を使用できるからContextです。

于 2016-12-24T23:11:49.167 に答える