EditText getText()返回不同的值,然后显示的内容

时间:2013-08-09 18:31:35

标签: android android-layout android-fragments android-edittext

我已经开发了一段时间的Android并且之前从未遇到过这种情况所以我希望这里的某些人可以提供帮助。我有多个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";             
            }
        });

1 个答案:

答案 0 :(得分:0)

我通过在onResume()方法中调用finsViews()和initPrefs()来解决它。虽然我不知道为什么这解决了这个问题,因为每当我向Fragment发送时,都会从oncreate调用这两个方法。如果有人能够进一步解释这一点非常感谢