2017-01-10 6 views
1

私のレイアウトはPagerAdapterで膨張されています。どちらも編集テキストフィールドを持っています。編集テキストフィールドからの値は、フラグメント内で使用されるオブジェクトに渡されます。しかし、デバイスを回転させると値のすべてが失われますが、これは正常です。アダプタで設定した値を保存して取得するにはどうすればよいですか?保存のEditText値は、回転変化に

public class AuthPeemAdapter extends PagerAdapter { 

Context mContext; 
int[] mResources; 
String[] mTitles; 
PreferenceAdapter mPreferenceAdapter; 
public AuthPeemAdapter.OnAuthPeemInteractionListener mListener; 

public interface OnAuthPeemInteractionListener { 
    void onAuth(String action); 

    void onRegisterActivationCode(UserInfo userInfo); 

    void onLogin(UserInfo userInfo); 
} 

public AuthPeemAdapter(Context context) { 
    this.mContext = context; 
    this.mResources = new int[2]; 
    this.mResources[0] = R.layout.shop_login; 
    this.mResources[1] = R.layout.shop_register; 
    this.mTitles = new String[2]; 
    this.mTitles[0] = "Login"; 
    this.mTitles[1] = "Register"; 
    this.mPreferenceAdapter = new PreferenceAdapter(context); 
} 

@Override 
public Object instantiateItem(ViewGroup collection, final int position) { 
    LayoutInflater inflater = LayoutInflater.from(mContext); 
    ViewGroup layout; 
    View view; 
    final EditText username; 
    final EditText password; 
    final EditText confirmPassword; 
    final EditText firstName; 
    final EditText lastName; 
    final EditText companyName; 
    final EditText peemName; 
    final EditText peemPassword; 
    Button button; 
    if (position == 0) {//Login 
     layout = (ViewGroup) inflater.inflate(mResources[position], collection, false); 

     view = layout.findViewById(R.id.tv_register_now); 
     username = (EditText) layout.findViewById(R.id.et_email); 
     password = (EditText) layout.findViewById(R.id.et_password); 
     password.setVisibility(View.GONE); 
     peemName = (EditText) layout.findViewById(R.id.et_peem_name); 
     peemPassword = (EditText) layout.findViewById(R.id.et_peem_pass); 
     button = (Button) layout.findViewById(R.id.btn_login); 

     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mListener.onAuth(mTitles[position]); 
      } 
     }); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       UserInfo userInfo = new UserInfo(); 
       if (username.getText().toString().isEmpty() || !Patterns.EMAIL_ADDRESS.matcher(username.getText().toString()).matches()) { 
        username.setError("Please enter valid email address"); 
        return; 
       } else { 
        userInfo.setEmail(username.getText().toString()); 
       } 
       if (peemName.getText().toString().isEmpty()) { 
        peemName.setError("Cannot be left blank"); 
        return; 
       } else { 
        userInfo.setPeemName(peemName.getText().toString()); 
       } 
       if (peemPassword.getText().toString().isEmpty()) { 
        peemPassword.setError("Must be at least 6 characters"); 
        return; 
       } else { 
        userInfo.setPeemPass(peemPassword.getText().toString()); 
       } 
       mPreferenceAdapter.serializeUserInfo(userInfo); 
       mPreferenceAdapter.apply(); 
       mListener.onLogin(userInfo); 
      } 
     }); 
     collection.addView(layout); 
    } else {//Register 
     layout = (ViewGroup) inflater.inflate(mResources[position], collection, false); 
     view = layout.findViewById(R.id.tv_register_now); 
     username = (EditText) layout.findViewById(R.id.et_email); 
     password = (EditText) layout.findViewById(R.id.et_password); 
     confirmPassword = (EditText) layout.findViewById(R.id.et_confirm_password); 
     confirmPassword.setVisibility(View.GONE); 
     firstName = (EditText) layout.findViewById(R.id.et_first_name); 
     lastName = (EditText) layout.findViewById(R.id.et_last_name); 
     companyName = (EditText) layout.findViewById(R.id.et_company_name); 
     button = (Button) layout.findViewById(R.id.btn_register); 
     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mListener.onAuth(mTitles[position]); 
      } 
     }); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       UserInfo userInfo = new UserInfo(); 
       if (username.getText().toString().isEmpty() || !Patterns.EMAIL_ADDRESS.matcher(username.getText().toString()).matches()) { 
        username.setError("Please enter valid email address"); 
        return; 
       } else { 
        userInfo.setEmail(username.getText().toString()); 
       } 
       if (password.getText().toString().isEmpty()) { 
        password.setError("Must be at least 6 characters"); 
        return; 
       } else { 
        userInfo.setPassword(password.getText().toString()); 
       } 
       if (companyName.getText().toString().isEmpty()) { 
        companyName.setError("Cannot be left blank"); 
        return; 
       } else { 
        userInfo.setCompany(companyName.getText().toString()); 
       } 
       if (firstName.getText().toString().isEmpty()) { 
        firstName.setError("Cannot be left blank"); 
        return; 
       } else { 
        userInfo.setFirstName(firstName.getText().toString()); 
       } 
       if (lastName.getText().toString().isEmpty()) { 
        lastName.setError("Cannot be left blank"); 
        return; 
       } else { 
        userInfo.setLastName(lastName.getText().toString()); 
       } 
       mListener.onRegisterActivationCode(userInfo); 
      } 
     }); 
     collection.addView(layout); 
    } 
    return layout; 
} 

@Override 
public void destroyItem(ViewGroup collection, int position, Object view) { 
    collection.removeView((View) view); 
} 

@Override 
public int getCount() { 
    return 2; 
} 

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return view == object; 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    return mTitles[position]; 
} 

public void addOnAuthPeemInteractionListener(AuthPeemAdapter.OnAuthPeemInteractionListener listener) { 
    mListener = listener; 
} 

public void removeOnAuthPeemInteractionListener() { 
    this.mListener = null; 
} 

}

+0

([この回答を見てください] http://stackoverflow.com/でデータを取り出すことができるようにfragmentが再作成されます回転今

public void onSaveInstanceState(Bundle savedState) { super.onSaveInstanceState(savedState); // getValues() is a method in your Adapter return your editext values.. String[] values = mAdapter.getValues(); savedState.putStringArray("myKey", values); } 

/10126961/6910818) –

+0

私は値を保存する方法を知っているが、ここでの問題は、アダプタ内にあり、私のEditTextと、それはレイアウトだということです。私はその断片にアクセスできない。 – Esteban

答えて

1

これを試してみてください。

はあなたの断片でonSaveInstanceStateメソッドを実装します。デバイスは、あなたが、あなたのフラグメントonCreate方法

public void onCreate (Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    if (savedInstanceState != null) { 
     String[] values = savedInstanceState.getStringArray("myKey"); 
     if (values != null) { 
      mAdapter = new MyAdapter(values); //pass values to your adapter class.. 
     } 
    } 

} 
+0

私は私のアダプタでこれをやった 'パブリック文字列saveValues(){ リターンuserNamee.getText()toString()を。 }公共ボイドrestoreValues(文字列値){ userNamee.setText(値)。 } '。私が得る唯一の問題は、回転後にedittext(この場合はuserNamee)がnullであることです。 – Esteban

+0

アダプターでビューを再び膨張させる必要があります。回転中にビューが破壊される... – rafsanahmad007

0

あなたはAddTextChangeListenerメソッドを使用することができます。

EditText searchTo = (EditText)findViewById(R.id.medittext); 
searchTo.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     doSomething(); 
    } 
}); 

編集テキストの値をafterTextChangeメソッドに格納するので、回転後も値を取得できます。

この回答が役立ちます。

コーディングハッピー....

関連する問題