在我的應用程序中,我瀏覽了大約5個不同的屏幕,每個屏幕都在它自己的activity
中。幾乎任何activity
都可以從任何其他activity
調用,所以我試圖建立一個幫助文件來管理intents
,以便我沒有冗餘代碼。幫助文件中的intents和活動導航的AtomicReferences
我使用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);
}
}
另一種方法是創建一個'BaseActivity'類來擴展AppCompatActivity幷包含所有的幫助器方法。所有的活動都應該擴展'BaseActivity'。在這種情況下,您不需要將'Context'傳遞給所有這些輔助方法,因爲輔助方法將是非靜態的,並且可以將'this'用作'Context'。 –
我完全看不出任何理由,爲什麼您需要在任何'static'方法中使用'AtomicReference'。 –
謝謝@DavidWasser。按照您的建議,我將我的幫助文件重建爲「BaseActivity」。這是更清潔,更容易管理。我仍然不確定Android Studio爲什麼會提示'AtomicReference',但它無論如何都能正常工作。 – aterbo