You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:45:45