Проблемы с полем EditText не отображается - PullRequest
3 голосов
/ 23 февраля 2011

Я очень плохо знаком с программированием на Android, поэтому извините, если это простая проблема.

Я пытаюсь создать форму для ввода пользовательских данных, и у меня появляется следующая ошибка:

"Окно уже сфокусировано, игнорируя усиление фокуса: com.android.internal.view.IInputMethodClient$Stub$Proxy@6279d588"

Так выглядит мой xml для макета:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:isScrollContainer="true"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">"
    <LinearLayout
        android:orientation="vertical"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_gravity="top">
        <TextView
            android:id="@+id/text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="This is a test\nsecond line\n"/>
       <EditText android:id="@+id/name"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:maxLength="30"
            android:maxLines="1"
            android:hint="@string/compose_name"></EditText>                  
       <Button
            android:id="@+id/new_contact_button"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/submit" />

    </LinearLayout>
</ScrollView>

И вот как выглядит мой файл класса:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_contact);

        //Set up handlers for input text
        //nameField = (EditText) findViewById(R.id.name);
        //name = nameField.getText().toString();

        final EditText nameField = (EditText) findViewById(R.id.name);
        nameField.setOnKeyListener(new View.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                (keyCode == KeyEvent.KEYCODE_ENTER)) {
                    String strNicknameToSave = nameField.getText().toString();
                    // TODO: Save Nickname setting (strNicknameToSave)
                    return true;
                }
                return false;
            }
        });

        submitButton = (Button) findViewById(R.id.new_contact_button);

        // Set up click listeners for all the buttons
        submitButton.setOnClickListener(this);

    }

Если я избавлюсь от поля EditText, то он будет работать нормально.Кроме того, он прекрасно работал только один раз, но я не смог повторить это (все, что я делал в это время, это удалить другой макет, который не используется).

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 23 февраля 2011
final EditText nameField = (EditText) findViewById(R.id.name);

Не объявляйте nameField как 'final' - посмотрите, работает ли это.

РЕДАКТИРОВАТЬ: Ах, хорошо, извините, я не думал прямо. Пусть ваш Activity реализует слушатель, а не создает его встроенным, и имейте nameField в качестве члена экземпляра ...

public class MyActivity extends Activity
    implements View.onKeyListener {

    EditText nameField = null; // <-- Instance member

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_contact);

        nameField = (EditText) findViewById(R.id.name);
        nameField.setOnKeyListener(this);
    }

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
            (keyCode == KeyEvent.KEYCODE_ENTER)) {
                String strNicknameToSave = nameField.getText().toString();
                // TODO: Save Nickname setting (strNicknameToSave)
                return true;
        }
        return false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...