使用startActivityForResult调用TimePicker后无法回显时间值求助
问题分析与解决方案
我一眼就找到了你数据传递失效的核心问题!问题出在MainActivity的onActivityResult方法里的判断条件,你混淆了requestCode和resultCode的作用。
错误点拆解
你当前代码里写的是:
if(requestCode == RESULT_OK)
但这两个参数的职责完全不同:
requestCode是你启动TimePicker页面时传入的请求标识(也就是你定义的REQUEST_TIME),用来区分不同页面的返回请求resultCode才是被启动页面返回的结果状态,比如RESULT_OK表示操作成功,RESULT_CANCELED表示用户取消操作
所以正确的判断应该是**resultCode == RESULT_OK**。
修正后的MainActivity代码
public class MainActivity extends AppCompatActivity{ public static final int REQUEST_TIME = 1; ..... public void chooseTime(){ ImageButton btn_time = (ImageButton)findViewById(R.id.btn_time); btn_time.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent_time = new Intent(MainActivity.this,time_pick.class); startActivityForResult(intent_time,REQUEST_TIME); } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode){ case REQUEST_TIME: { // 修正:判断resultCode而非requestCode,同时增加data非空判断避免空指针 if(resultCode == RESULT_OK && data != null){ TextView text_time = (TextView)findViewById(R.id.menu_time); text_time.setText(data.getStringExtra("time_detail")); } } } } }
额外优化提示
- 确保
TimePicker页面的onButtonClick方法已经在onCreate中被调用,否则按钮点击事件不会绑定,也就无法触发数据返回。 - 如果你使用Android 5.0(API 21)及以上版本,
getCurrentHour()和getCurrentMinute()已被废弃,建议改用更适配的新方法:String time_detail = timePicker.getHour() + " : " + timePicker.getMinute();
内容的提问来源于stack exchange,提问作者Jusle
相关产品推荐
相关产品推荐

