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

Android 不能直接傳遞 EditText 物件,改傳 ID 或字串才是正道

     編輯:程式設計綜合問答

誤區

嘗試將 EditText 物件本身透過 Intent.putExtra() 傳遞給另一個 Activity,但 Intent 僅支援基本型別、Parcelable/Serializable 物件,View 及其子類別皆不可序列化。

正確做法三選一

方案一:傳遞文字內容 (最常用)

// 送出端
Intent intent = new Intent(A.this, B.class);
intent.putExtra("input_text", editText.getText().toString());
startActivity(intent);

// 接收端
String text = getIntent().getStringExtra("input_text");
editText.setText(text);

方案二:傳遞 View ID (需同一畫面內)

// 送出端
intent.putExtra("view_id", editText.getId());

// 接收端 (同一 Activity 或已知版面)
int id = getIntent().getIntExtra("view_id", -1);
EditText et = findViewById(id);

方案三:使用 startActivityForResult 回傳結果

// Activity A
startActivityForResult(new Intent(this, B.class), REQUEST_CODE);

// Activity B 完成後
Intent result = new Intent();
result.putExtra("result_text", editText.getText().toString());
setResult(RESULT_OK, result);
finish();

// Activity A 接收
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        String text = data.getStringExtra("result_text");
    }
}

總結

永遠傳遞資料 (字串、數字、ID),不要嘗試傳遞 View 實例。View 持有 Context 參考,跨 Activity 傳遞會導致記憶體洩漏與序列化失敗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved