0

친구들.Android : EditText에서 ListView 업데이트

State 패턴을 구현하는 앱 모듈이 있습니다. 아이디어는 다음과 같습니다 1. 사용자는 날짜 입력 - NE 상태로> 2. 화면의 변화를 동적으로 목록보기 팽창 및

문제는 일부 데이터 목록을 채우기 위해 사용자에게 요청하는 난에서 notifyDataSetChange()를 호출 할 때 두 번째 방법을 업데이트, EditText보기 dont't는 더 이상 그 기능을하고 싶지 않습니다.

이것은 내 문제의 핵심을 포함하고 있다고 생각되는 logcat의 문자열입니다. 33 :

09-10 10 38.937 26954-26954/com.example.android.turtleinfo의 D/ListView에 : 변경 접근성 포커스 위치 = 0 여기서

모든 것을위한 코드이다.

1. 내 주 패턴 슈퍼 클래스

public abstract class ScreenState 
    { 

     public BuilderActivity activity; 



     public ScreenState(BuilderActivity activity) { 
      this.activity = activity; 
      //initializeScreen(activity); 
     } 

     public abstract void initializeScreen(Activity activity); 
     public abstract void switchState(); 
     public abstract void updateText(View view); 


     public void addTextWatcher(EditText text) { 
      text.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
       @Override 
       public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
        if (actionId == EditorInfo.IME_ACTION_DONE) { 

         activity.state.updateText(v); 

         return true; 
        } 
        return false; 
       } 
      }); 
     } 


    } 

2. 초기화 화면의 구현 및 때문에 updateData 방법

@Override 
    public void initializeScreen(Activity activity) { 

     ((BuilderActivity) activity).editText.setHint("Name"); 
     addTextWatcher(((BuilderActivity) activity).editText); 
     textView = (TextView)activity.getLayoutInflater().inflate(R.layout.schedule_text_style, null); 
     textView.setHeight(100); 
     screenText = "End Date: " + new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH).format(((BuilderActivity) activity).data.getEndDate())+"\n\n"; 

     textView.setText(screenText+"\n"); 
     ((BuilderActivity) activity).scheduleLayout.addView(textView); 

     ((BuilderActivity) activity).data.setNames(new ArrayList<String>()); 

     lv = (ListView)activity.getLayoutInflater().inflate(R.layout.listview_text_style, null); 
     listItems = new ArrayList<>(); 

     adapt = new ArrayAdapter<>(super.activity, R.layout.schedule_text_style, listItems); 
     lv.setAdapter(adapt); 
     ((BuilderActivity) activity).scheduleLayout.addView(lv); 


    } 

@Override 
public void updateText(View view) { 

    String text = activity.editText.getText().toString(); 

    if (text.length() >= 2) { 
     if (!activity.data.names.contains(text)) { 
      activity.data.addToList(text); 



      listItems.add(text); 
      adapt.notifyDataSetChanged(); 

      activity.editText.setText(""); 
      counter++; 
      activity.editText.setText(""); 

     } else { 
      Toast.makeText(activity, "same names are not allowed", 
       Toast.LENGTH_LONG).show(); 
      ((BuilderActivity) activity).editText.setText(""); 
     } 
    } 
    else 
    { 
     Toast.makeText(activity, "name should contain 2 or more symbols", 
       Toast.LENGTH_LONG).show(); 
     ((BuilderActivity) activity).editText.setText(""); 
    } 

} 

가 보이는 방법이있다 장치.

1. 먼저 삽입

2

enter image description here 확인을 불허 또한 insertionas 불가능하다. 내가 다음 확인을 클릭하면 softkeyboard 버튼 NEXT 버튼 enter image description here

3. 먼저 전환, 글고 아무 일도 발생하지 않습니다 초점을 푼다하지만 다음 버튼 스위치에 '/ N'버튼을 누릅니다. 누구나 알고있는 경우

enter image description here

그래서, 내가 worng 뭐하는 거지, 도와주세요!

미리 감사드립니다.

답변

1

귀하의 문제는

public void addTextWatcher(EditText text) 

기능입니다. 안드로이드에서

봐는 : 및 안드로이드 imeActionId : 대해서는 imeOptions이 속성을 더한 setOnEditorActionListener() 메소드, 모든 텍스트 뷰/EDITTEXT에.

또한 이것을 사용하여 키보드 단추의 텍스트를 변경할 수도 있습니다.

mEditText.setImeActionLabel("Your text", KeyEvent.KEYCODE_ENTER);