我有listview。每个列表都包含我的自定义适配器中的checkbox,edittext和两个按钮。当我点击加号按钮时,我想增加相应的位置edittext值。我不知道如何从listView获取特定位置edittext值,同时单击加号按钮。
请有人帮助我!
这是我的代码......
public class MenuListCustomAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<String> list = new ArrayList<String>();
private ArrayList<String> Amtlist = new ArrayList<String>();
private Context context;
TextView listItemText;
TextView listAmtText;
EditText qty;
CheckBox checkBox;
ImageView plus;
ImageView minus;
public MenuListCustomAdapter(ArrayList<String> list, ArrayList<String> Amtlist, Context context) {
this.list = list;
this.Amtlist = Amtlist;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.menu_custom_fragment, null);
}
listItemText = (TextView)view.findViewById(R.id.menu_list_item_string);
listAmtText = (TextView)view.findViewById(R.id.menu_amt_list_item);
qty = (EditText)view.findViewById(R.id.quantity);
checkBox = (CheckBox)view.findViewById(R.id.chckbox);
plus = (ImageView)view.findViewById(R.id.add);
minus = (ImageView)view.findViewById(R.id.minus);
qty.setText("1");
qty.setTag(position);
listItemText.setText(list.get(position));
listAmtText.setText(Amtlist.get(position));
plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String value = // How to get particular position edittext value
int count = Integer.parseInt(value)+1;
Log.d("value", String.valueOf(count));
qty.setText(Integer.toString(count));
}
});
return view;
}
}
提前致谢!!
答案 0 :(得分:1)
尝试这样做是为了避免ListView重复,因为ListView不保证你在那里添加的项目的唯一性,Android重用UI对象。
使用列表元素创建一个新类:
public class YourObject {
private String listElement;
private String amListElement;
private int count;
public YourObject(String listElement, String amListElement) {
this.listElement = listElement;
this.amListElement = amListElement;
this.count = 1;
}
public String getListElement() {
return listElement;
}
public void setListElement(String listElement) {
this.listElement = listElement;
}
public String getAmListElement() {
return amListElement;
}
public void setAmListElement(String amListElement) {
this.amListElement = amListElement;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
将一个带有对象(模型)的ArrayList传递给适配器:
public MenuListCustomAdapter(ArrayList<YourObject> list, Context context) {
this.list = list;
this.context = context;
}
//....
qty.setText(list.get(position).getCount());
qty.setTag(position);
listItemText.setText(list.get(position).getListElement());
listAmtText.setText(Amtlist.get(position).getAmListElement());
plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int count = list.get(position).getCount()+1;
list.get(position).setCount(count);
Log.d("value", String.valueOf(count));
qty.setText(""+count);
notifyDataSetChanged();
}
});
获取特定位置edittext值
list.get(position).getCount();
如果你想获得edittext的值,你可能会得到我在开头说的错误。
答案 1 :(得分:0)
在android:onClick="plushClicked"
位于。
+
然后创建方法plushClicked
public void plushClicked(View v)
{
//get the row the clicked button is in
LinearLayout vwParentRow = (LinearLayout)v.getParent();
TextView child = (TextView)vwParentRow.getChildAt(0);
Button btnChild = (Button)vwParentRow.getChildAt(1);//where your child belongs to
EditText et = (EditText) vwParentRow.getChildAt(2);
et.getText().toString(); //here is your value of editText
}
查看this以获取更多参考资料。
答案 2 :(得分:0)
您可以在适配器的getView()
方法中将当前视图设置为按钮,在button.setOnClickListener()
中,您可以获取此视图并执行任何操作。使用setTag()
和getTag()
。
示例:
在适配器getView()
中:
btnPlus = (Button) convertView.findViewById(R.id.btnPlusdessert);
btnPlus.setTag(R.integer.btnplusview,convertView);
Button的onClickListener()
btnPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View tempView =(View) v.getTag(R.integer.btnplusview);
EditText qty = (EditText)tempView .findViewById(R.id.quantity);
qty.setText("sometext");
现在您可以看到行布局的完整视图,您可以使用tempView获取其他textview或按钮或其他内容。
假设您单击第二行的+按钮,然后第二行的整个行视图将在tempView中膨胀,您可以获得第二行的edittext并根据您的要求更改其值。