第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

OnRetainCustomConfigurationInstance 之后所有 EditTexts

OnRetainCustomConfigurationInstance 之后所有 EditTexts

素胚勾勒不出你 2021-11-11 18:04:35
當(dāng)我使用 onRetainCustomNonConfigurationInstance 保存包含在我的自定義 EditTexts 中的文本時(shí),在我旋轉(zhuǎn)設(shè)備后,最后一個(gè) EditText 中包含的文本被復(fù)制到目標(biāo)布局中的所有其他文本。在用斷點(diǎn)調(diào)試時(shí),我發(fā)現(xiàn)所有的文本值一直都是正確的。但是在更改完成后,所有 EditText 都會(huì)顯示相同的文本(來(lái)自最后一個(gè)的文本),并且焦點(diǎn)將分配給布局中的第一個(gè)。我在最簡(jiǎn)單的項(xiàng)目中復(fù)制了這種行為。我嘗試了 android API 級(jí)別 24 和 28。這種行為來(lái)自哪里,我該如何解決?主活動(dòng).java :public class MainActivity extends AppCompatActivity {    private ArrayList<CustomEdit> editList=new ArrayList<CustomEdit>();    private LinearLayout layout;    private Button addButton;    @RequiresApi(api = Build.VERSION_CODES.M)    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        addButton=findViewById(R.id.add_button);        layout = findViewById(R.id.layout);        addButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                addEdit();            }        });        CustomSave data = (CustomSave)getLastCustomNonConfigurationInstance();        if(data==null) return;        for(int i = 0; i<data.texts.size();i++){            addEdit(data.texts.get(i));        }    }    @Override    public Object onRetainCustomNonConfigurationInstance() {        CustomSave data = save();        return data;}    private CustomSave save(){        ArrayList<String> texts = new ArrayList<String>();        for(int i =0; i<editList.size(); i++)            texts.add(editList.get(i).getText());        return new CustomSave(texts);}    /**     * Create a new custom EditText with hint     */    private void addEdit(){        CustomEdit newEdit = new CustomEdit(this,editList.size());        layout.addView(newEdit,editList.size());        editList.add(newEdit);}}
查看完整描述

2 回答

?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊

對(duì)于如何解決此問(wèn)題,您有兩種選擇:將代碼移動(dòng)到活動(dòng)生命周期中的不同點(diǎn)或更改 .xml 的 xml 定義CustomEdit。


安卓生命周期

將此代碼移出onCreate():


CustomSave data = (CustomSave)getLastCustomNonConfigurationInstance();

if(data==null) return;


for(int i = 0; i<data.texts.size();i++){

    addEdit(data.texts.get(i));

}

并將其放入onRestoreInstanceState():


@Override

protected void onRestoreInstanceState(Bundle savedInstanceState) {

    super.onRestoreInstanceState(savedInstanceState);


    CustomSave data = (CustomSave)getLastCustomNonConfigurationInstance();

    if(data==null) return;


    for(int i = 0; i<data.texts.size();i++){

        addEdit(data.texts.get(i));

    }

}

或者


XML 定義

將此屬性添加到文件中的<EditText>標(biāo)記custom_edit_text.xml:


android:saveEnabled="false"

您為保存/恢復(fù)文本值而編寫(xiě)的代碼沒(méi)有任何問(wèn)題。但是,在 之后 onCreate(),Android 會(huì)自動(dòng)執(zhí)行自己的保存/恢復(fù)邏輯,這會(huì)覆蓋您所做的。


如果您將代碼從 移動(dòng)onCreate()到onRestoreInstanceState(),那么您的代碼將在 Android 自動(dòng)保存/恢復(fù)后運(yùn)行,因此您將“獲勝”?;蛘撸梢酝ㄟ^(guò)添加saveEnabled=false屬性來(lái)禁用自動(dòng)保存/恢復(fù)。


Android 的自動(dòng)保存/恢復(fù)不起作用的原因是它基于每個(gè)視圖的android:id屬性,并且您的EditText標(biāo)簽都具有相同的 id。這意味著所有四個(gè)值都使用相同的鍵保存,因此最后一個(gè)值會(huì)覆蓋所有先前的值。


查看完整回答
反對(duì) 回復(fù) 2021-11-11
?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

所以這里發(fā)生的事情是,Android 也在為您的自定義EditText實(shí)現(xiàn)處理狀態(tài)保存,這會(huì)覆蓋您的實(shí)現(xiàn)。由于您的CustomEdit實(shí)例列表是動(dòng)態(tài)生成的,您可能不想依賴(lài) Android 來(lái)保存視圖的狀態(tài),因?yàn)樗鼈儧](méi)有唯一的 ID。

由于您的CustomEdit膨脹custom_edit_text.xml(將EditTextID聲明為@+id/edit),這意味著CustomEdit您添加到布局中的每個(gè)都具有相同的內(nèi)部 ID EditTextR.id.edit。由于它們都具有相同的 ID,因此每個(gè)視圖都會(huì)將其狀態(tài)保存到該 ID,因此保存其狀態(tài)的最后一個(gè)將最終成為恢復(fù)狀態(tài)時(shí)應(yīng)用于所有視圖的文本。

您可以做兩件事來(lái)避免這種情況:

  1. 在你的custom_edit_text.xml,添加android:saveEnabled="false"EditText。這將阻止View保存that的狀態(tài)。這將是首選,因?yàn)樗苊饬俗霾槐匾墓ぷ鳌?/p>

  2. onRestoreInstanceState()當(dāng)前正在恢復(fù)視圖狀態(tài)的位置執(zhí)行狀態(tài)恢復(fù)。


查看完整回答
反對(duì) 回復(fù) 2021-11-11
  • 2 回答
  • 0 關(guān)注
  • 212 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)