4

私はしばらくの間アンドロイドを開発してきましたが、これまで一度も遭遇したことがないので、ここの誰かが助けてくれることを願っています. 複数の 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";             
            }
        });
4

1 に答える 1

0

onResume() メソッドで finsViews() と initPrefs() を呼び出して解決しました。Fragmentにアクセスするたびに、これら2つのメソッドがoncreateから呼び出されていることを確認して、これが問題を解決した理由はわかりません。誰かがこれをさらに説明できれば、それは大歓迎です

于 2013-08-09T19:03:44.143 に答える