私はしばらくの間アンドロイドを開発してきましたが、これまで一度も遭遇したことがないので、ここの誰かが助けてくれることを願っています. 複数の EditText と autocompleTextViews があり、sharedprefs からデータを取り込みます。問題は、ビューが本来あるべきテキストを表示していないことです。アクティビティを終了して戻ってくるまで、そこにあった古い値が表示されます。奇妙な部分は、間違った値が表示されているときに editText で getText 関数を呼び出すと、getText() が正しい値を返すことです。誰かがこれがなぜなのか説明してもらえますか.
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
view = inflater.inflate(R.layout.extra_info, container, false);
myPrefs = PreferenceManager
.getDefaultSharedPreferences(getActivity());
initPrefs();
findTextViews();
findViews();
initDataSource();
runQueries();
getAllFields();
return view;
}
private void findViews() {
EditPayID = (AutoCompleteTextView)view.findViewById( R.id.EditpayID );
EditPayID.setText(PayIDPref);
Log.e("findviews",EditPayID.getText().toString());
//^^ correct value but screen still displays wrong value
}
private void initPrefs(){
editor = myPrefs.edit();
PayIDPref = myPrefs.getString("PayID", "");
Log.e("payidPref", PayIDPref);
}
次のコードは問題とは無関係だと思いますが、何かが欠けている可能性があります。これは、payID に関連付けられているすべてのコードです。
EditPayID.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
EditPayID.showDropDown();
EditPayID.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
String selected = EditPayID.getAdapter().getItem(arg2).toString();
EditPayID.setText(selected);
editor.putString("PayID" ,selected);
editor.apply();
}
});
return false;
}
});
EditPayID.setValidator(new android.widget.AutoCompleteTextView.Validator() {
@Override
public boolean isValid(CharSequence text) {
Log.e("in pay isValid" , "validating");
Collections.sort(validPays);
if (Collections.binarySearch(validPays, text.toString()) >= 0){
return true;
}
return false;
}
@Override
public CharSequence fixText(CharSequence invalidText) {
EditPayID.setError("You have Entered invalid PayID");
editor.putString("PayID" ,"Invalid PayID");
editor.apply();
return "Invalid PayID";
}
});