2

저는 지금 안드로이드를 개발해 왔으며, 전에이 문제를 직접 경험하지 못했습니다. sharedprefs에서 자신을 채우는 여러 EditText 및 autocompleTextViews가 있습니다. 문제는 뷰가 텍스트를 표시하지 않는다는 것입니다. 그들은 활동을 떠나고 돌아올 때까지 그곳에 있었던 오래된 가치를 보여줍니다. 이상한 부분은 잘못된 값이 표시 될 때 editText에서 getText 함수를 호출하면 getText()가 올바른 값을 반환한다는 것입니다. 누군가가 왜 이런지 설명해 주실 수 있습니까?EditText 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

코드를 제공 할 수 있습니까? – Jim

+0

나는 그것이 도움이 될 것이라고 확신 할 수는 없다. 아쉽게 게시합니다 – KBusc

+0

귀하의 공유 환경 설정에 새로운 가치를 제대로 저장하지 않은 것으로 보입니다. – Tobiel

답변

0

내가 finsViews를 호출하여 그것을 해결()와 initPrefs와 관련된 모든 코드입니다() 내 onResume() 메서드. 비록 내가이 단편을 보았을 때마다이 두 가지 방법이 창조에서부터 불려지는 것을 보는 문제를 어떻게 풀 었는지 확신 할 수는 없지만. 누군가가 이것을 더 설명 할 수 있다면 크게 환영 할 것입니다.

+0

finsViews()가 무엇인지 알 수 있습니까?이 방법은 찾을 수 없습니다. –

+0

@KBusc은 findViews()라고 생각합니다. – Pawan

+0

@GopalSinghSirvi : findViews() 및 initPrefs()는 자신의 메서드이며 EditTexts를 다시 초기화하면 텍스트가 다시 설정됩니다. – Pawan

관련 문제