从内Android的一个视图中打开一个对话框,输入文本 [英] Opening a Dialog with text input from within a View in 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屋!