AndroidはListViewの中の多セットの配置の複数のEditTextデータの混乱を解決します.
9969 ワード
効果図:参考:https://github.com/Aspsine/EditTextInListView ありがとうございます
もしListViewの中に一つのレイアウトだけが含まれているなら、ここを参考にしてもいいです.http://blog.csdn.net/fan7983377/article/details/51516155
この効果の主要な問題点は、マルチセットのitemと各item内部のEditTextデータがlistviewの多重化によるデータの混乱です.
主なコードはアドホッターの中にあります.
もしListViewの中に一つのレイアウトだけが含まれているなら、ここを参考にしてもいいです.http://blog.csdn.net/fan7983377/article/details/51516155
この効果の主要な問題点は、マルチセットのitemと各item内部のEditTextデータがlistviewの多重化によるデータの混乱です.
主なコードはアドホッターの中にあります.
public class AddAdapter extends BaseAdapter {
private Context context;
private List mans;
private LayoutInflater layinf;
public AddAdapter(Context context, List mans) {
this.context = context;
this.mans = mans;
layinf = LayoutInflater.from(context);
}
@Override
public int getCount() {
return mans.size();
}
@Override
public int getItemViewType(int position) {
// position , 0, 1,
return mans.get(position).id;
}
@Override
public int getViewTypeCount() {
// adapter
return 2;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final AddBean bean = mans.get(position);
// holder
ViewManHolder vhMan = null;
// holder
ViewWoManHolder vhWoMan = null;
if(convertView == null){
switch (bean.id){
case 0:
convertView = layinf.inflate(R.layout.item_man ,null);
vhMan = new ViewManHolder(convertView);
convertView.setTag(vhMan);
break;
case 1:
convertView = layinf.inflate(R.layout.item_woman ,null);
vhWoMan = new ViewWoManHolder(convertView);
convertView.setTag(vhWoMan);
break;
}
}else{
switch (bean.id){
case 0:
vhMan = (ViewManHolder) convertView.getTag();
break;
case 1:
vhWoMan = (ViewWoManHolder) convertView.getTag();
break;
}
}
//
switch (bean.id){
case 0:
//
vhMan.name.clearFocus();
vhMan.age.clearFocus();
vhMan.sex.clearFocus();
//
if (vhMan.name.getTag() instanceof TextWatcher) {
vhMan.name.removeTextChangedListener((TextWatcher) (vhMan.name.getTag()));
}
if (vhMan.age.getTag() instanceof TextWatcher) {
vhMan.age.removeTextChangedListener((TextWatcher) (vhMan.age.getTag()));
}
if (vhMan.sex.getTag() instanceof TextWatcher) {
vhMan.sex.removeTextChangedListener((TextWatcher) (vhMan.sex.getTag()));
}
//
vhMan.name.setText(TextUtils.isEmpty(bean.name)? "":bean.name);
vhMan.age.setText(TextUtils.isEmpty(bean.age)? "":bean.age);
vhMan.sex.setText(TextUtils.isEmpty(bean.sex)? "":bean.sex);
//
final TextWatcher oneNameWatcher = new SimpeTextWather() {
@Override
public void afterTextChanged(Editable s) {
if (TextUtils.isEmpty(s)) {
bean.setName(null);
} else {
bean.setName(String.valueOf(s));
}
}
};
final TextWatcher oneAgeWatcher = new SimpeTextWather() {
@Override
public void afterTextChanged(Editable s) {
if (TextUtils.isEmpty(s)) {
bean.setAge(null);
} else {
bean.setAge(String.valueOf(s));
}
}
};
final TextWatcher oneSexWatcher = new SimpeTextWather() {
@Override
public void afterTextChanged(Editable s) {
if (TextUtils.isEmpty(s)) {
bean.setSex(null);
} else {
bean.setSex(String.valueOf(s));
}
}
};
// EditText
vhMan.name.addTextChangedListener(oneNameWatcher);
vhMan.name.setTag(oneNameWatcher);
vhMan.age.addTextChangedListener(oneAgeWatcher);
vhMan.age.setTag(oneAgeWatcher);
vhMan.sex.addTextChangedListener(oneSexWatcher);
vhMan.sex.setTag(oneSexWatcher);
break;
case 1:
//
vhWoMan.name.clearFocus();
vhWoMan.age.clearFocus();
vhWoMan.sex.clearFocus();
vhWoMan.test.clearFocus();
if (vhWoMan.name.getTag() instanceof TextWatcher) {
vhWoMan.name.removeTextChangedListener((TextWatcher) (vhWoMan.name.getTag()));
}
if (vhWoMan.age.getTag() instanceof TextWatcher) {
vhWoMan.age.removeTextChangedListener((TextWatcher) (vhWoMan.age.getTag()));
}
if (vhWoMan.sex.getTag() instanceof TextWatcher) {
vhWoMan.sex.removeTextChangedListener((TextWatcher) (vhWoMan.sex.getTag()));
}
if (vhWoMan.test.getTag() instanceof TextWatcher) {
vhWoMan.test.removeTextChangedListener((TextWatcher) (vhWoMan.test.getTag()));
}
vhWoMan.name.setText(TextUtils.isEmpty(bean.name) ? "" : bean.name);
vhWoMan.age.setText(TextUtils.isEmpty(bean.age) ? "" : bean.age);
vhWoMan.sex.setText(TextUtils.isEmpty(bean.sex) ? "" : bean.sex);
vhWoMan.test.setText(TextUtils.isEmpty(bean.test) ? "" : bean.test);
//
final TextWatcher twoNameWatcher = new SimpeTextWather() {
@Override
public void afterTextChanged(Editable s) {
if (TextUtils.isEmpty(s)) {
bean.setName(null);
} else {
bean.setName(String.valueOf(s));
}
}
};
final TextWatcher twoAgeWatcher = new SimpeTextWather() {
@Override
public void afterTextChanged(Editable s) {
if (TextUtils.isEmpty(s)) {
bean.setAge(null);
} else {
bean.setAge(String.valueOf(s));
}
}
};
final TextWatcher twoSexWatcher = new SimpeTextWather() {
@Override
public void afterTextChanged(Editable s) {
if (TextUtils.isEmpty(s)) {
bean.setSex(null);
} else {
bean.setSex(String.valueOf(s));
}
}
};
final TextWatcher twoTestWatcher = new SimpeTextWather() {
@Override
public void afterTextChanged(Editable s) {
if (TextUtils.isEmpty(s)) {
bean.setTest(null);
} else {
bean.setTest(String.valueOf(s));
}
}
};
// EditText
vhWoMan.name.addTextChangedListener(twoNameWatcher);
vhWoMan.name.setTag(twoNameWatcher);
vhWoMan.age.addTextChangedListener(twoAgeWatcher);
vhWoMan.age.setTag(twoAgeWatcher);
vhWoMan.sex.addTextChangedListener(twoSexWatcher);
vhWoMan.sex.setTag(twoSexWatcher);
vhWoMan.test.addTextChangedListener(twoTestWatcher);
vhWoMan.test.setTag(twoTestWatcher);
break;
}
return convertView;
}
/**
* Holder
*/
class ViewManHolder{
EditText name;
EditText age;
EditText sex;
public ViewManHolder(View convertView){
name = (EditText) convertView.findViewById(R.id.name);
age = (EditText) convertView.findViewById(R.id.age);
sex = (EditText) convertView.findViewById(R.id.sex);
}
}
/**
* Holder
*/
class ViewWoManHolder{
EditText name;
EditText age;
EditText sex;
EditText test;
public ViewWoManHolder(View convertView){
name = (EditText) convertView.findViewById(R.id.name);
age = (EditText) convertView.findViewById(R.id.age);
sex = (EditText) convertView.findViewById(R.id.sex);
test = (EditText) convertView.findViewById(R.id.test);
}
}
public abstract class SimpeTextWather implements TextWatcher {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
}
}
ポップアップ入力方式のadapperリフレッシュ問題を解決するには、ここを参照してください.http://blog.csdn.net/fan7983377/article/details/51516155