радиокнопка установлена, проверено, если

#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. однако я думаю, что он сравнивает адрес памяти по умолчанию, что почти наверняка не то, что вы хотите.