2016-04-27 2 views
2
private String isChecked(String id) { 
    id = "R.id." + id; 
    int ID = getResources().getIdentifier(id, "id", "com.example.android.justjava"); 
    CheckBox checkBox = (CheckBox) findViewById(ID); 
    return String.valueOf(checkBox.isChecked()); 
} 

Я прохожу в значении check_whipped_cream (идентификатор флажком поле в виде XML-документа) в функции выше, но когда я отладки приложения, переменная ID всегда становится равным 0. Что с этим не так?Resource ID через getIdentifier возвращает 0

ПРИМЕЧАНИЕ: isChecked(), вызываемый в методе последней строки, относится к классу CheckBox.

ответ

4

большой проблемой является

id = "R.id." + id; 

вы спрашиваете андроида искать R.id.id в id, так как вы обеспечиваете уже "id" в качестве второго аргумента. Это должно быть только id. Чтобы избежать проблем с орфографическими словами, вы должны полагаться на возвращаемое значение .getPackageName() вместо жесткого кодирования его по своему усмотрению.

Использование

избавиться от id = "R.id." + id;

getResources().getIdentifier(id, "id", getPackageName()); 
+0

id - строка ... Если я вставляю «привет», это будет «R.id.» + «Hello» –

+1

, если у вас есть и «id», объявленный с идентификатором «hello», вы должны предоставить только «привет» – Blackbelt

+0

О, я понял сейчас ... Нам не нужен R.id. часть? –

1

Во-первых, чтобы быть уверенным, что пакет является правильным, вы можете использовать context.getPackageName()

И ваш идентификатор неправильно, не сцеплять R.id к нему, то есть ваша ошибка;)

+1

Спасибо так много. он работает сейчас. –

1

Чтобы понять, что это то, что давайте рассмотрим пример.

<TextView 
     android:id="@+id/lbl_welcome" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/img_logo" 
     android:layout_marginTop="20dp" 
     android:gravity="center" 
     android:text="YOUR SHOPPING COMPANION!" 
     android:textColor="@color/toolbar" 
     android:textSize="@dimen/font_12"/> 

В выше кусок кода, если я хочу, чтобы получить этот элемент, то я буду использовать

R.id.lbl_welcome Это фактическое значение в R.java файле, что несколько так

public final class R { 
    public static final class id { 
     public static final int lbl_welcome=0x7f100197; 
    } 
} 

Если у вас есть строковое имя вида, которое в нашем случае равно lbl_welcome, то мы можем использовать метод getIdentifier -

getResources().getIdentifier("lbl_welcome", "id", getPackageName()); 

выше фрагмент кода даст вам значение, эквивалентное R.id.lbl_welcome

Смежные вопросы