問題描述
我有一個基于 SurfaceHolder 的帶有 View 的應用(類似于 Lunar Lander 教程).整個 GUI 繪制在畫布上,我希望能夠在給定時刻使用自定義布局對話框提示用戶文本輸入,然后使用標準程序處理并呈現到畫布上.
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 線程傳遞到 Activity,進而可以獲取輸入,并發送回復等.
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)
.
此調用返回 null
.
這里認為最佳做法是什么?我找不到任何好的示例,而且 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.
如果有任何幫助,我將不勝感激.
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;
}
}
清單定義為:
<activity
android:name=".utils.TextEntryActivity"
android:label="Type in the value"
android:theme="@android:style/Theme.Dialog" />
這篇關于從 Android 的視圖中打開帶有文本輸入的對話框的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!