首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android onActivityResult 後 setText 無效:使用 runOnUiThread 確保主執行緒更新

     編輯:程式設計綜合問答

現象

onActivityResult 中取得資料,Log 正常顯示,但 tv.setText(...) 介面不更新。

原因

onActivityResult 雖在主執行緒回調,但若 Fragment 嵌套、ViewPager 延遲初始化、或 View 尚未附著到視窗,直接更新可能不生效。

解決方案

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 100 && resultCode == 200 && data != null) {
        final String value = data.getStringExtra("b");
        // 確保在 UI 執行緒且 View 已就緒
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tv.setText(value);
            }
        });
    }
}

進階:Fragment 中處理

// Fragment 中
requireActivity().runOnUiThread(() -> textView.setText(value));
// 或
view.post(() -> textView.setText(value));

檢查清單

  • tv 是否已正確 findViewById 且非 null
  • 是否在 onActivityResult 前就已設定 setText 但被覆蓋
  • ViewPager 惰性載入導致 Fragment 未建立 View 時收到回調
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved