从内Android的一个视图中打开一个对话框,输入文本 [英] Opening a Dialog with text input from within a View in Android

查看:105
本文介绍了从内Android的一个视图中打开一个对话框,输入文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个基础上,SurfaceHolder(类似月球着陆教程)视图的应用程序。 整个图形用户界面绘制在画布上,我希望能够使用自定义布局对话框,随后被使用标准程序照顾,并呈现在画布上,以提示用户输入文本,在一个特定的时刻。

I have an app with a View based on the SurfaceHolder (similar to the Lunar Lander tutorial). The whole GUI is drawn on a canvas, and I want to be able to prompt for user text input at a given moment using a custom layout Dialog, that is then taken care of and rendered to the canvas using standard procedure.

我的问题,但问题在于,这似乎是最好的做法是从活动打开的对话​​框。 这是不成问题了,因为我想我可能会创建一个处理程序,然后将它传递给视图,可以反过来用它来从GUI线程传递消息,在视图上的活动,这反过来又可以获取输入,并发送回一个应答等。

My problem, however, is that it seems that best practice is to open Dialogs from the Activity. This is no problem either, since i thought i might create a Handler and then pass it to the View that could in turn use it to pass Messages from the GUI thread in the View on to the Activity, that in turn could fetch the input, and send a reply back, etc.

但问题是,当我叫的setContentView(R.layout.main),其中包含了整个应用程序,我想打电话给 MyAppView mMyAppView = (MyAppView)findViewById(R.id.app_view_id)

Problem is, after I call setContentView(R.layout.main), which contains the whole app, i want to call MyAppView mMyAppView = (MyAppView) findViewById(R.id.app_view_id).

此调用返回

什么是认为这里是最好的做法?我找不到任何好的例子和API的转动起来,好了,不多。

What is considered to be best practice here? I can't find any good examples and the API is turning up, well, not much.

我会AP preciate任何帮助这里。

I would appreciate any help here.

推荐答案

创建对话框主题活动,以显示在您的当前活动。

Create a dialog themed activity to display over your current activity.

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();
    }


}

启动方式:

Intent foo = new Intent(this, TextEntryActivity.class);
foo.putExtra("value", "old value to edit");
this.startActivityForResult(foo, EDIT_ACTION);

然后捉对 onActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case EDIT_ACTION:
                try {
                    String value = data.getStringExtra("value");
                    if (value != null && value.length() > 0) {
                        //do something with value
                    }
                } catch (Exception e) {
                }
                break;
            default:
                break;
        }
    }

清单的定义是:

Manifest is defined as:

<activity
            android:name=".utils.TextEntryActivity"
            android:label="Type in the value"
            android:theme="@android:style/Theme.Dialog" />

这篇关于从内Android的一个视图中打开一个对话框,输入文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆