Открытие диалога с вводом текста из представления в Android - PullRequest
4 голосов
/ 17 июня 2010

У меня есть приложение с View, основанным на SurfaceHolder (аналогично уроку Lunar Lander). Весь графический интерфейс рисуется на холсте, и я хочу иметь возможность запрашивать ввод текста пользователем в данный момент с помощью настраиваемого диалогового окна компоновки, которое затем обрабатывается и отображается на холсте с помощью стандартной процедуры.

Моя проблема, однако, заключается в том, что лучше всего открывать диалоги из упражнения. Это также не проблема, так как я подумал, что мог бы создать обработчик и затем передать его представлению, которое, в свою очередь, могло бы использовать его для передачи сообщений из потока графического интерфейса в представлении в действие, которое, в свою очередь, могло бы извлечь вход и отправить ответ и т. д.

Проблема в том, что после того, как я позвоню setContentView(R.layout.main), который содержит все приложение, я хочу позвонить MyAppView mMyAppView = (MyAppView) findViewById(R.id.app_view_id).

Этот вызов возвращает null.

Что считается здесь лучшей практикой? Я не могу найти хороших примеров, и API работает, ну, не очень.

Буду признателен за любую помощь.

Ответы [ 2 ]

14 голосов
/ 17 июня 2010

Создайте тематическую деятельность в диалоговом окне для отображения поверх текущей деятельности.

public class TextEntryActivity extends Activity {
    private EditText et;

    /*
     * (non-Javadoc)
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_text_entry);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
                WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
        // title
        try {
            String s = getIntent().getExtras().getString("title");
            if (s.length() > 0) {
                this.setTitle(s);
            }
        } catch (Exception e) {
        }
        // value

        try {
            et = ((EditText) findViewById(R.id.txtValue));
            et.setText(getIntent().getExtras().getString("value"));
        } catch (Exception e) {
        }
        // button
        ((Button) findViewById(R.id.btnDone)).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                executeDone();
            }
        });
    }

    /* (non-Javadoc)
     * @see android.app.Activity#onBackPressed()
     */
    @Override
    public void onBackPressed() {
        executeDone();
        super.onBackPressed();
    }

    /**
     *
     */
    private void executeDone() {
        Intent resultIntent = new Intent();
        resultIntent.putExtra("value", TextEntryActivity.this.et.getText().toString());
        setResult(Activity.RESULT_OK, resultIntent);
        finish();
    }


}

Запустите:

Манифест определяется как:

<activity
            android:name=".utils.TextEntryActivity"
            android:label="Type in the value"
            android:theme="@android:style/Theme.Dialog" />
0 голосов
/ 20 августа 2011

Я также хочу ответить на этот вопрос для себя.Ответ уже здесь хороший.Страница разработчика Android как диалог изменения samples .

Я еще не прочитал его полностью, но если вы ищете тег

DIALOG_TEXT_ENTRY

кажется, это то, что вам (и мне) нужно.

Сначала я собираюсь исследовать этот пример.

...