Skip to content

Commit fa0fee6

Browse files
committed
fix a crash in ouletConfigAdapter
1 parent 39ddbdb commit fa0fee6

File tree

1 file changed

+42
-33
lines changed

1 file changed

+42
-33
lines changed

src/oly/netpowerctrl/OutletConfigAdapter.java

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
import android.content.Context;
77
import android.content.SharedPreferences;
8+
import android.text.Editable;
9+
import android.text.TextWatcher;
810
import android.view.LayoutInflater;
911
import android.view.View;
1012
import 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

Comments
 (0)