55
66import android .content .Context ;
77import android .content .SharedPreferences ;
8+ import android .text .Editable ;
9+ import android .text .TextWatcher ;
810import android .view .LayoutInflater ;
911import android .view .View ;
1012import android .view .View .OnClickListener ;
@@ -52,11 +54,13 @@ class ViewHolder {
5254 EditText etName ;
5355 EditText etNumber ;
5456 ImageButton btnDelete ;
57+ TextWatcher etNameTextWatcher ;
58+ TextWatcher etNumberTextWatcher ;
5559 }
5660
5761 public View getView (int position , View convertView , ViewGroup parent ) {
5862
59- ViewHolder holder ;
63+ final ViewHolder holder ;
6064 if (convertView == null ) {
6165 holder = new ViewHolder ();
6266 convertView = inflater .inflate (R .layout .outlet_config_item , null );
@@ -66,16 +70,18 @@ public View getView(int position, View convertView, ViewGroup parent) {
6670 convertView .setTag (holder );
6771 } else {
6872 holder = (ViewHolder ) convertView .getTag ();
73+ holder .etName .removeTextChangedListener (holder .etNameTextWatcher );
74+ holder .etNumber .removeTextChangedListener (holder .etNumberTextWatcher );
6975 }
7076
7177 OutletInfo outlet = items .get (position );
7278 holder .etName .setText (outlet .Description );
7379 if (outlet .OutletNumber >= 1 )
7480 holder .etNumber .setText (((Integer )outlet .OutletNumber ).toString ());
7581 else holder .etNumber .setText ("" );
76- holder .etName .setTag (position );
77- holder .etNumber .setTag (position );
78- holder .btnDelete .setTag (position );
82+ holder .etName .setTag (outlet );
83+ holder .etNumber .setTag (outlet );
84+ holder .btnDelete .setTag (outlet );
7985
8086 if (holder .etName .getText ().toString ().length () == 0 )
8187 holder .etName .setError (convertView .getContext ().getResources ().getText (R .string .error_outlet_config_name ));
@@ -88,39 +94,42 @@ public View getView(int position, View convertView, ViewGroup parent) {
8894 holder .etNumber .setError (null );
8995
9096 //we need to update adapter once we finish with editing
91- holder .etName .setOnFocusChangeListener (new OnFocusChangeListener () {
92- public void onFocusChange (View v , boolean hasFocus ) {
93- if (!hasFocus ){
94- OutletInfo outlet = items .get ((Integer )v .getTag ());
95- outlet .Description = ((EditText )v ).getText ().toString ();
96- if (outlet .Description .length () == 0 )
97- ((EditText )v ).setError (v .getResources ().getText (R .string .error_outlet_config_name ));
98- else
99- ((EditText )v ).setError (null );
100- SaveOutlets ();
101- }
102- }
103- });
104- holder .etNumber .setOnFocusChangeListener (new OnFocusChangeListener () {
105- public void onFocusChange (View v , boolean hasFocus ) {
106- if (!hasFocus ){
107- OutletInfo outlet = items .get ((Integer )v .getTag ());
108- try {
109- outlet .OutletNumber = Integer .parseInt (((EditText )v ).getText ().toString ());
110- SaveOutlets ();
111- ((EditText )v ).setError (null );
112- }
113- catch (Exception e ) {
114- outlet .OutletNumber = -1 ;
115- ((EditText )v ).setError (v .getResources ().getText (R .string .error_outlet_config_number ));
116- }
117- }
97+ holder .etNameTextWatcher = new TextWatcher () {
98+ public void onTextChanged (CharSequence s , int start , int before , int count ) {/*nop*/ }
99+ public void beforeTextChanged (CharSequence s , int start , int count , int after ) {/*nop*/ }
100+ public void afterTextChanged (Editable s ) {
101+ OutletInfo outlet = (OutletInfo )holder .etName .getTag ();
102+ outlet .Description = s .toString ();
103+ if (outlet .Description .length () == 0 )
104+ holder .etName .setError (holder .etName .getResources ().getText (R .string .error_outlet_config_name ));
105+ else
106+ holder .etName .setError (null );
107+ SaveOutlets ();
118108 }
119- });
109+ };
110+ holder .etName .addTextChangedListener (holder .etNameTextWatcher );
120111
112+ holder .etNumberTextWatcher = new TextWatcher () {
113+ public void onTextChanged (CharSequence s , int start , int before , int count ) {/*nop*/ }
114+ public void beforeTextChanged (CharSequence s , int start , int count , int after ) {/*nop*/ }
115+ public void afterTextChanged (Editable s ) {
116+ OutletInfo outlet = (OutletInfo )holder .etNumber .getTag ();
117+ try {
118+ outlet .OutletNumber = Integer .parseInt (s .toString ());
119+ SaveOutlets ();
120+ holder .etNumber .setError (null );
121+ }
122+ catch (Exception e ) {
123+ outlet .OutletNumber = -1 ;
124+ holder .etNumber .setError (holder .etNumber .getResources ().getText (R .string .error_outlet_config_number ));
125+ }
126+ }
127+ };
128+ holder .etNumber .addTextChangedListener (holder .etNumberTextWatcher );
129+
121130 holder .btnDelete .setOnClickListener (new OnClickListener () {
122131 public void onClick (View v ) {
123- items .remove (items . get (( Integer )v .getTag () ));
132+ items .remove (( OutletInfo )v .getTag ());
124133 SaveOutlets ();
125134 notifyDataSetChanged ();
126135 }
0 commit comments