4

私は、複数の断片を保持し、示す活動を持っています。保存されたインスタンスからフラグメントが復元されたときに、editTextがテキストを自動入力しないようにするにはどうすればよいですか?

私がフラグメントを再入力すると、すべてのeditTextのテキストが自動的に塗りつぶされます。すべてのフィールドで同じテキストが表示されます。

例:

開き断片二つeditTextsテキスト記入:
CustomEditText1:[______]
CustomEditText2:[_acb__]
CustomEditText3:[_qwe__]

クリック戻るボタンを押して、フラグメントを再入力してください
CustomEditText1:[_qwe__]
CustomEditText2:[_qwe__]
CustomEditText3:[_qwe__]

これはフラグメントの私の上書き方法である:私はEDITTEXTがオーバーライド内のブレークポイントでテキストを設定していることが確認でき、デバッグすることで

public AddBookingFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    tabsActivity = (TabsActivity) getActivity(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_add_booking, container, false); 

    lastNameEditText = (NASEditText) view.findViewById(R.id.nas_add_booking_last_name); 
    pnrEditText = (NASEditText) view.findViewById(R.id.nas_add_booking_pnr); 

    addButton = (NASButton) view.findViewById(R.id.nas_add_booking_add_button); 
    scanButton = (NASButton) view.findViewById(R.id.nas_add_booking_scan_button); 

    confirmationBox = (LinearLayout) view.findViewById(R.id.nas_add_booking_confirmation_box); 
    confirmationText = (NASHeaderAndSubtext) view.findViewById(R.id.nas_add_booking_confirmation_text); 
    confirmationBox.setVisibility(View.GONE); 

    bindButtons(); 

    FontHelper.setFont(container, tabsActivity); 
    return view; 
} 

OnTextChanged 。

これは、そのブレークポイントからのスタックトレースです: Stacktrace
(NASEditTextは私のカスタムビューである)

2つの問題/質問:私は充填から活動/フラグメント/ EDITTEXTを防ぐことができますどのように

  1. フラグメントが復元されたときにフィールドのテキストに表示されますか?
  2. すべてのフィールドで同じテキストが入力されるのはなぜですか?
+0

恐らく保存された状態をどこかに復元します。フラグメントのコードを表示する –

+0

@SergeyGlotovコードを見てください。私は何も復元していない。 Androidはbackstack afaikに追加された断片のためにeditTextの状態を自動的に保存しています... – Otziii

+2

@SergeyGlotov AndroidはEditTextの状態を別々に復元します。問題の解決策は、EditTextをサブクラス化し、そこにsetText( "")を使ってonRestoreSavedStateメソッドを上書きすることです。しかし、再び、これはハックな解決策です。 – Slugge

答えて

5

友人からの助けを借りて問題を発見しました!

SaveEnabledは、AndroidのeditTextではデフォルトでtrueです。あなたのEditTextの
setSaveEnabled(false);


ソリューションを設定するだけです。

なぜすべてのフィールドの最後の値を埋めるのか分かりません...

+0

これはxmlでも行うことができます –

1

これが答えではないが、それは問題が修正されています。

@Sluggeでコメントしたよう:
あなたからやりたい/カスタムEDITTEXTでonSaveInstanceStateメソッドをオーバーライドして、テキストをクリア そこ。

関連する問題