滚动时,我在扩展listview中遇到问题,edittext值发生了变化。我试图将值存储在模态类中,并在查看create.But Edittext值的同时设置该值,同时滚动。请建议任何解决方案。这是我的代码for expandable listview。给我一些提示或我在这段代码中出错的地方。
以下是来自android studio的日志
11-04 14:31:59.826 3632-3632 / com.codefuelindia.healthcircleordermgmt E / edittext: - :android.support.design.widget.TextInputEditText { 48bc9e8 VFED..CL。 ........ 0,0-514,118#7f080061 app:id / edtQty} Pos0 11-04 14:32:04.862 3632-3632 / com.codefuelindia.healthcircleordermgmt E / edittext: - :android.support.design.widget.TextInputEditText { a67b858 VFED..CL。 ........ 0,0-514,118#7f080061 app:id / edtQty} Pos4 11-04 14:32:04.911 3632-3632 / com.codefuelindia.healthcircleordermgmt E / edittext: - :android.support.design.widget.TextInputEditText { 48bc9e8 VFED..CL。 ...... ID 0,0-514,118#7f080061 app:id / edtQty} Pos5 11-04 14:32:04.932 3632-3632 / com.codefuelindia.healthcircleordermgmt E / edittext: - :android.support.design.widget.TextInputEditText { 39f8d9c VFED..CL。 ........ 0,0-514,118#7f080061 app:id / edtQty} Pos6 11-04 14:32:05.681 3632-3632 / com.codefuelindia.healthcircleordermgmt E / edittext: - :android.support.design.widget.TextInputEditText { d8d264 VFED..CL。 ........ 0,0-514,118#7f080061 app:id / edtQty} Pos3 11-04 14:32:05.738 3632-3632 / com.codefuelindia.healthcircleordermgmt E / edittext: - :android.support.design.widget.TextInputEditText { bd81fa0 VFED..CL。 ........ 0,0-514,118#7f080061 app:id / edtQty} Pos2 11-04 14:32:05.815 3632-3632 / com.codefuelindia.healthcircleordermgmt E / edittext: - :android.support.design.widget.TextInputEditText { 39f8d9c VFED..CL。 ........ 0,0-514,118#7f080061 app:id / edtQty} Pos1 11-04 14:32:05.879 3632-3632 / com.codefuelindia.healthcircleordermgmt E / edittext: - :android.support.design.widget.TextInputEditText { 48bc9e8 VFED..CL。 ........ 0,0-514,118#7f080061 app:id / edtQty} Pos0 11-04 14:32:06.201 3632-3632 / com.codefuelindia.healthcircleordermgmt E / edittext: - :android.support.design.widget.TextInputEditText { a67b858 VFED..CL。 ........ 0,0-514,118#7f080061 app:id / edtQty} Pos4 11-04 14:32:06.235 3632-3632 / com.codefuelindia.healthcircleordermgmt E / edittext: - :android.support.design.widget.TextInputEditText { 39f8d9c VFED..CL。 ........ 0,0-514,118#7f080061 app:id / edtQty} Pos5 11-04 14:32:06.289 3632-3632 / com.codefuelindia.healthcircleordermgmt E / edittext: - :android.support.design.widget.TextInputEditText { 48bc9e8 VFED..CL。 ...... ID 0,0-514,118#7f080061 app:id / edtQty} Pos6
edittext引用重复。如何解决?
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.content.Context;
import android.graphics.Typeface;
import android.support.design.widget.TextInputEditText;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
import com.codefuelindia.healthcircleordermgmt.R;
import com.codefuelindia.healthcircleordermgmt.model.CatMaster;
import com.codefuelindia.healthcircleordermgmt.model.ProChild;
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context _context;
private ArrayList<CatMaster> _listDataHeader; // header titles
// child data in format of header title, child title
private HashMap<CatMaster, ArrayList<ProChild>> _listDataChild;
public ExpandableListAdapter(Context context, ArrayList<CatMaster> listDataHeader,
HashMap<CatMaster, ArrayList<ProChild>> listChildData) {
this._context = context;
this._listDataHeader = listDataHeader;
this._listDataChild = listChildData;
}
@Override
public Object getChild(int groupPosition, int childPosititon) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.get(childPosititon);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final ProChild childText = (ProChild) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_item, null);
}
TextView txtListChild = (TextView) convertView
.findViewById(R.id.lblListItem);
TextView tvUnitPrice;
final TextInputEditText edtQty;
final TextView tvTotalPrice;
tvUnitPrice = (TextView) convertView.findViewById(R.id.tvUnitPrice);
edtQty = (TextInputEditText) convertView.findViewById(R.id.edtQty);
edtQty.setText();
tvTotalPrice = (TextView) convertView.findViewById(R.id.tvTotalPrice);
txtListChild.setText(childText.getName());
tvUnitPrice.setText(childText.getPrice());
edtQty.setText(childText.getQty());
edtQty.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
f(!TextUtils.isEmpty(charSequence.toString())){
childText.setQty(charSequence.toString());
final double total=Double.parseDouble(childText.getPrice())*Integer.parseInt(charSequence.toString());
tvTotalPrice.setText("Total: ".concat(String.valueOf(total)));
}
else {
tvTotalPrice.setText("");
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.size();
}
@Override
public Object getGroup(int groupPosition) {
return this._listDataHeader.get(groupPosition);
}
@Override
public int getGroupCount() {
return this._listDataHeader.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
CatMaster headerTitle = (CatMaster) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_group, null);
}
TextView lblListHeader = (TextView) convertView
.findViewById(R.id.lblListHeader);
lblListHeader.setTypeface(null, Typeface.BOLD);
lblListHeader.setText(headerTitle.getCatName());
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
答案 0 :(得分:0)
,edittext值更改。这是android中列表容器的属性(列表视图或回收站视图)。您的数据将在滚动后回收。因此,如果您需要维护视图的状态,只需在数据集内保存即可。 例如:在您的情况下,您需要在滚动期间维护以前键入的文本。
edtQty.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if(!TextUtils.isEmpty(charSequence.toString())){
childText.setValue(charSequence.toString());
final double total=Double.parseDouble(childText.getPrice())*Integer.parseInt(charSequence.toString());
tvTotalPrice.setText("Total: ".concat(String.valueOf(total)));
}
else {
tvTotalPrice.setText("");
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
然后为返回的每个新子项设置以前保存的文本:
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
et_Search.setText(dataset.get(position).Val);
}
在版本Edittext中,每个列表项都是错误的设计实践。我建议你想出更好的UI设计。例如,您可以在列表项上有一个按钮,单击按钮可以在对话框的帮助下进行输入,也可以保存以前的状态。阅读This。
答案 1 :(得分:0)
在对onchildView()进行调试和分析后,我找到了有效的解决方案.. 我为商店父母和子视图创建了视图持有者
class ViewHolder {
//Log.e("text view",txtListChild.toString());
TextView lblListHeader;
HashMap<Integer, HashMap<Integer, View>> multiHash = new HashMap<>();
HashMap<Integer, View> innerHashMap;
public ViewHolder(View v) {
innerHashMap = new HashMap<>();
lblListHeader = v.
findViewById(R.id.lblListHeader);
}
public View getInnerView(int pos, int groupPos) {
return multiHash.get(groupPos).get(pos);
}
// lblListHeader.setTypeface(null, Typeface.BOLD);
// lblListHeader.setText(headerTitle.getCatName());
public void setInnerView(int pos, int groupPos, View innerView) {
innerHashMap.put(pos, innerView);
multiHash.put(groupPos, innerHashMap);
}
}
和setter和getter方法来存储和检索来自hashmap的视图。如果视图为null我将视图设置为hashmap,而其他人则从我存储的hashmap中获取视图。希望其他面向此问题的开发人员获得帮助从这个答案。祝你有个美好的一天..
@覆盖
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final ProChild childText = (ProChild) getChild(groupPosition, childPosition);
View myConvertView = convertView;
// Log.e("quantity:- ",childText.getQty().concat(String.valueOf(childPosition)));
final TextInputEditText textInputEditText;
if (convertView == null || !isLastChild || childPosition==this._listDataChild.get(this._listDataHeader.get(groupPosition))
.size()-1) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_item, null);
holder.setInnerView(childPosition, groupPosition, convertView);
TextInputEditText textInputEditText1 = convertView.findViewById(R.id.edtQty);
TextView tvUnitPrice = convertView.findViewById(R.id.tvUnitPrice);
final TextView tvTotalPrice = convertView.findViewById(R.id.tvTotalPrice);
final TextView tvHeader=convertView.findViewById(R.id.lblListItem);
tvHeader.setText(childText.getName());
textInputEditText1.setText(childText.getQty());
tvUnitPrice.setText(childText.getPrice());
tvTotalPrice.setText( String.valueOf(childText.getTotal()));
//holder.edtQty.setText(childText.getQty());
// edtQty.setText(_listDataChild.get(_listDataHeader.get(groupPosition)).get(childPosition).getQty());
textInputEditText1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//Log.e("child...",""+childPosition);
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
grandTotalOf = 0.0;
childText.setQty(editable.toString());
// _listDataChild.get(_listDataHeader.get(groupPosition)).get(childPosition).setQty(editable.toString());
if (!editable.toString().isEmpty() && !editable.toString().equals("0")) {
//final double total=Double.parseDouble();
final double total = Double.parseDouble(childText.getPrice()) * Integer.parseInt(editable.toString());
tvTotalPrice.setText("Total: ".concat(String.valueOf(total)));
childText.setTotal(total);
} else {
tvTotalPrice.setText("");
childText.setTotal(0);
grandTotal.setGrandTotal(0);
}
for(int i=0;i<_listDataHeader.size();i++){
for(int j=0;j<_listDataChild.get(_listDataHeader.get(i)).size();j++){
grandTotalOf=grandTotalOf + _listDataChild.get(_listDataHeader.get(i)).get(j).getTotal();
}
}
grandTotal.setGrandTotal(grandTotalOf);
}
});
return holder.getInnerView(childPosition, groupPosition);
} else {
convertView = holder.getInnerView(childPosition, groupPosition);
if (convertView == null) {
holder.setInnerView(childPosition, groupPosition, myConvertView);
convertView = holder.getInnerView(childPosition, groupPosition);
}
TextInputEditText textInputEditText1 = convertView.findViewById(R.id.edtQty);
TextView tvUnitPrice = convertView.findViewById(R.id.tvUnitPrice);
final TextView tvTotalPrice = convertView.findViewById(R.id.tvTotalPrice);
final TextView tvHeader=convertView.findViewById(R.id.lblListItem);
textInputEditText1.setText(childText.getQty());
tvUnitPrice.setText(childText.getPrice());
tvHeader.setText(childText.getName());
tvTotalPrice.setText( String.valueOf(childText.getTotal()));
edtQty.setText(_listDataChild.get(_listDataHeader.get(groupPosition)).get(childPosition).getQty());
textInputEditText1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//Log.e("child...",""+childPosition);
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
grandTotalOf=0.0;
childText.setQty(editable.toString());
// _listDataChild.get(_listDataHeader.get(groupPosition)).get(childPosition).setQty(editable.toString());
if (!editable.toString().isEmpty() && !editable.toString().equals("0")) {
//final double total=Double.parseDouble();
final double total = Double.parseDouble(childText.getPrice()) * Integer.parseInt(editable.toString());
tvTotalPrice.setText("Total: ".concat(String.valueOf(total)));
childText.setTotal(total);
grandTotal.setGrandTotal(total);
} else {
tvTotalPrice.setText("");
childText.setTotal(0);
grandTotal.setGrandTotal(0);
}
for(int i=0;i<_listDataHeader.size();i++){
for(int j=0;j<_listDataChild.get(_listDataHeader.get(i)).size();j++){
grandTotalOf=grandTotalOf + _listDataChild.get(_listDataHeader.get(i)).get(j).getTotal();
}
}
grandTotal.setGrandTotal(grandTotalOf);
}
});
return convertView;
}
}