#android
#Android
Вопрос:
Я реализовал radiobuttongroup в руководстве notepadv3. Я хочу установить радиокнопку с проверкой, является ли выводимая строка «Fehltag» или «Verspaetung». это не полный исходный код.
<RadioGroup
android:id="@ id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RadioButton
android:id="@ id/rbtnVerspaetung"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/rbtnVerspätung" />
<RadioButton
android:id="@ id/rbtnFehltag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/rbtnFehltag" />
</RadioGroup>
java:
private RadioButton rbtnFehltag;
private RadioButton rbtnVerspaetung;
private void populateFields() {
if (mRowId != null) {
Cursor note = mDbHelper.fetchNote(mRowId);
startManagingCursor(note);
mTitleText.setText(note.getString(
note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
mBodyText.setText(note.getString(
note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));
mFehlzeitText.setText(note.getString(
note.getColumnIndexOrThrow(NotesDbAdapter.KEY_Time)));
mTest.setText(note.getString(
note.getColumnIndexOrThrow(NotesDbAdapter.KEY_Test)));
String ausgabe;
//returns Verspaetung or Fehltag
ausgabe = note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_Test));
rbtnFehltag.setChecked(ausgabe == "Verspaetung"); //it doesn't work
//rbtnFehltag.setChecked(true); //this is working but it doesn't peform the task
}
Ответ №1:
Я не уверен, что понимаю, о чем вы спрашиваете. Но я думаю, что ваша проблема заключается в том, что вы не можете использовать оператор == для строк. Я полагаю, что оператор == будет сравнивать расположение строк в памяти, а не содержимое строки. Я думаю, что если вы замените конец вашего кода этим:
String ausgabe;
//returns Fehltag or Verspaetung
ausgabe = note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_Test));
rbtnFehltag = (RadioButton)findViewById(R.id.rbtnFehltag);
rbtnVerspaetung = (RadioButton)findViewById(R.id.rbtnVerspaetung);
rbtnFehltag.setChecked(ausgabe.equals("Fehltag"));
rbtnVerspaetung.setChecked(ausgabe.equals("Verspaetung"));
Строки на самом деле являются объектами в Java. В общем, вы должны использовать оператор == только при сравнении примитивов. == будет сравнивать адреса объектов в памяти. Это полезно, когда вам нужно знать об идентичности, а не о равенстве. Но я не думаю, что это то, к чему вы стремитесь здесь.
удачи.
Комментарии:
1. я новичок в Java … я думаю, что в c # вы можете сделать это так (string == «abc») … спасибо за быстрый ответ
2. нет проблем. Я помню, как потратил несколько часов, возясь с оператором == и строками, когда изучал Java. Просто помните, что у вас есть два варианта equals-равно и dot-равно. используйте equals-равные для примитивов и для проверки идентичности с объектами. используйте dot-equals при проверке на равенство с объектами. Это почти всегда означает, что вам придется реализовать ‘public boolean equals(Object obj);’ Таким образом, вы можете точно определить, что считается «равным» для любого объекта, с которым вы работаете. Конечно, строки — это особый случай, когда функция dot-equals уже реализована правильным образом
3. обратите внимание, что все объекты в конечном итоге будут наследоваться от класса Object. Я считаю, что объект реализует .equals. однако я думаю, что он сравнивает адрес памяти по умолчанию, что почти наверняка не то, что вы хотите.