2017-01-25 2 views
0

스위치와 텍스트 필드 편집 테이블을 만듭니다. 내가 원하는 것은 같은 tablerow에있는 편집 텍스트 필드에 특정 텍스트를 입력 할 때 사용할 수 있도록 스위치를 설정하는 것입니다. 그래서 텍스트 행을 편집 할 때 텍스트를 입력하면 스위치를 8 행으로 설정하는 방법을 설정합니다 8.android 편집 텍스트 필드에 데이터를 입력 할 때 동적으로 생성 된 스위치를 활성화 또는 비활성화하는 방법

for (int i = 0; i< dbarray_id.size(); i++) 
    { 
     CODE IS HERE TO CREATE A TABLEROW 

     //Now add a switch to the row 
     Switch switch1 = new Switch(getActivity()); 
     switch1.setId(i); 
     switch1.setTag(i); 
     switch1.setSwitchMinWidth(50); 
     switch1.setEnabled(false) 

     //Add a edittext field to the row 
     final EditText txtaccesscode = new EditText(getActivity()); 
     txtaccesscode.setId(i); 
     txtaccesscode.setTag(i); 
     txtaccesscode.setHint("CODE?"); 
     txtaccesscode.setInputType(TYPE_TEXT_FLAG_NO_SUGGESTIONS); 
     txtaccesscode.addTextChangedListener(new TextWatcher() 
     { 
      @Override 
      public void beforeTextChanged(
      ....etc... for after change ... 


     repeat for the number of rows in the database. 

그래서 어떤 행에 텍스트를 입력하면 해당 스위치가 활성화됩니다.

감사합니다.

답변

0

클래스의 EditText 및 Swith 참조를 모두 캡슐화하면 textWatcher가 실행될 때 두 참조가 모두 예상됩니다.

public static class SwitchToggleListener { 
    public SwitchToggleListener(final Switch switchView, final EditText editText) { 
     editText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) { 
       //Do nothing 
      } 
      @Override 
      public void onTextChanged(final CharSequence s, final int start, final int before, final int count) { 
       //Your own condition here 
       switchView.setEnabled(s.toString().equals("ok")); 
      } 
      @Override 
      public void afterTextChanged(final Editable s) { 
       //Do nothing 
      } 
     }); 
    } 
} 

그런 다음 루프에서이 작업을 수행 :

new SwitchToggleListener(switch1, editText1); 
new SwitchToggleListener(switch2, editText2); 
new SwitchToggleListener(switch3, editText3); 

당신은 어쩌면이이 작업을 수행 할 수있는 다른 방법이 있습니다, inneficient, 즉이 경우에 해당하는지 알려 너무 많은 행이있는 경우.

+0

좋은 답변 .... 일했는데 ..... –

0

스위치는 최종 또는 필드 여야합니다.

final Switch switch = new Switch(getActivity()); 

그런 다음 beforeTextChanged 수신기에서 액세스 할 수 있습니다. 항상 거기에서 변경할 수 있습니다.

txtaccesscode.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(){ 
      switch.setEnable(true); 
     } 
    } 
); 

루프가 끝나면 더 이상 변수에 액세스 할 수 없지만 여전히 존재합니다. 그리고 루프의 다음 반복에서 새로운 스위치이기 때문에 같은 이름을 가진 스위치라도 다른 스위치입니다.

+0

데이터 필드가 텍스트 필드 8에 입력되면 스위치 8이 켜지거나 텍스트 필드 9에 데이터가 입력되면 9가 전환됩니다. 위의 예에서는 올바른 필드를 선택하지 않습니다. –

+0

다른 범위이기 때문에 나머지 코드에서 변수에 액세스 할 수 없어도 listener에서 textField8의 텍스트가 변경 될 때 switch8이 토글되고 변수가 여전히 해당 범위에서 액세스 가능하다는 것을 이미 정의합니다 . –

+0

하지만 스위치 (8)를 활성화하려면 어떻게 설정해야합니까? .isEnabled –