2016-01-06 7 views
-1

Один активности называет этоиспользования конечного ключевого слова в андроиде

Intent intent = new Intent(DrinkCategoryActivity.this, DrinkActivity.class); 
intent.putExtra(DrinkActivity.EXTRA_DRINKNO, (int) id); 

, а затем в другой деятельности, которая получает намерение, следующий код

public class DrinkActivity extends Activity { 
    public static final String EXTRA_DRINKNO = "drinkNo";  // ??????? 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_drink); 

     // Get the drink from the intent 
     int drinkNo = (Integer)getIntent().getExtras().get(EXTRA_DRINKNO); // ????? 
     Drink drink = Drink.drinks[drinkNo]; 

Часть я не понимать всю декларацию и определение переменной EXTRA_DRINKNO во втором действии. Во-первых, я просто ожидал, что он будет определен как int НЕ как String. Какой смысл присвоить ему фактическое значение "drinkNo"?

Затем более поздняя версия (см. Вторую строку, отмеченную вопросительным знаком) drinkNo отлита до Integer. Это даже одна и та же переменная?

+1

«drinkNo отбрасывается на целое число» Нет, это не так (и какое целое его можно было отличить, во всяком случае?). 'Bundle.get' принимает параметр String, и для этого ключа происходит возврат значения, которое может быть присвоено' Integer'. –

+0

Этот вопрос не имеет ничего общего с ключевым словом 'final' - он будет работать точно так же без это (при условии, что никто не изменяет значение 'EXTRA_DRINKNO'). –

+0

Это 'intent.putExtra (DrinkActivity.EXTRA_DRINKNO, (int) id);' равнозначно 'intent.putExtra (" drinkNo ", (int) id);' и '(Integer) getIntent(). GetExtras(). get (EXTRA_DRINKNO); 'равнозначно' (Integer) getIntent(). getExtras(). get ("drinkNo"); –

ответ

1

EXTRA_DRINKNO представляет собой ключ на карте, это не целое значение. Возможно, было бы лучше назвать EXTRA_DRINKNO_KEY.

get(EXTRA_DRINKNO) извлекает целое число от getExtras(), используя строковое значение в качестве ключа.

Переменная drinkNo представляет фактическое целочисленное значение.

0

Я думаю, вы говорите о final в вашем

public static final String EXTRA_DRINKNO = "drinkNo"; 

То есть как раз там, чтобы получить глобальный доступ без удалось изменить эту переменную снова, поскольку он используется в качестве ключа для ваших Extras, которая идя к вашим намерениям.

Вы можете использовать,

int drinkNo = getIntent().getIntExtra(DrinkActivity.EXTRA_DRINKNO, -1); 

-1 получит назначен drinkNo, если этого не было,

intent.putExtra(DrinkActivity.EXTRA_DRINKNO, (int) id); 

я не посудить о (int) idотливать. Это, вероятно, избыточно.