gpt4 book ai didi

android - 带有 EditText 的可扩展 ListView

转载 作者:行者123 更新时间:2023-11-29 14:12:52 25 4
gpt4 key购买 nike

滚动时我在可扩展 ListView 中遇到问题,edittext 值发生变化。我尝试将值存储在模态类中并在 View 创建时设置该值。但是 Edittext 值在滚动时发生变化。请提出任何解决方案。这是我的代码用于可扩展 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} Pos011-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} Pos411-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} Pos511-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} Pos611-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} Pos311-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} Pos211-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} Pos111-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} Pos011-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} Pos411-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} Pos511-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;
}
}

最佳答案

在对 onchildView() 进行调试和分析后,我找到了可行的解决方案。我已经为商店父 View 和 subview 创建了查看器

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);


}
}

以及用于从 hashmap 存储和检索 View 的 setter 和 getter 方法。如果 View 为空,我将 View 设置为 hashmap,否则从我存储的 hashmap 中获取 View 。希望遇到此问题的其他开发人员得到帮助来自这个答案。祝你有美好的一天..

@覆盖

    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;
}





}

关于android - 带有 EditText 的可扩展 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47091018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com