我正在尝试从onStart启动浮动活动,以便在初始活动开始时从用户那里检索一些信息。我有以下内容:
@Override
public void onStart(){
super.onStart();
callProfileDialog();
}
callProfileDialog()
只是:
private void callProfileDialog(){
Intent i = new Intent(this, com.utility.ProfileDialog.class);
startActivityForResult(i, PROFDIALOG);
}
ProfileDialog.class
从输入框返回一个String。如果返回的结果是RESULT_CANCELED
,那么我重新启动活动。
我遇到的问题是,当程序启动时,屏幕只是黑色。如果我点击后退按钮,则会返回RESULT_CANCELED
,然后显示初始活动以及浮动活动(因为它在获得RESULT_CANCELED
时会自动调用)。为什么我不能通过从onStart()调用ProfileDialog.class
来获取活动?当我在onCreate()结束时调用它时得到了相同的结果,这是我切换到使用onStart()的方式。谢谢你的帮助。
编辑:我也尝试了以下内容:
@Override
public void onWindowFocusChanged(boolean hasFocus){
if(hasFocus)
callProfileDialog();
}
但这也不起作用。一旦我按下后退按钮,一切正常,但没有这样做,它全是黑色。
答案 0 :(得分:2)
我遇到了类似的问题,并通过覆盖onAttachedToWindow()来获得我想要的行为。
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
callProfileDialog();
}
答案 1 :(得分:0)
我认为这是因为你还没有有效的背景。尝试其中之一:
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
callProfileDialog();
}
或
@Override
public void onResume(){
super.onResume();
callProfileDialog();
}
答案 2 :(得分:0)
您应该覆盖Activity.onActivityResult()
并设置一个您从孩子返回的标志,并且只有在该标志不为真时才启动您的新活动:
public class MyActivity extends Activity {
boolean returningFromChild = false;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
returningFromChild = true;
}
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
// Use your main layout here
setContentView(R.layout.main);
}
@Override
protected void onResume() {
super.onResume();
if (!returningFromChild) {
callProfileDialog();
}
returningFromChild = false;
}
}
// ProfileDialog.java
public class ProfileDialog extends Activity {
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
// Use your dialog layout here
setContentView(R.layout.profile_dialog);
// Use the id of your "OK" button here:
Button btn = (Button) findViewById(R.id.btnSaveInput);
btn.setOnClickListener(new View.OnClickListener {
public void onClick(View v) {
// XXX: Get / validate the user's input. Can add it to a new Intent object as an Extra,
// and use the setResult(RESULT_OK, intent); version:
setResult(RESULT_OK);
finish();
}
});
}
}