如何在listview按钮内单击时从列表视图中获取每个edittext值

时间:2016-04-05 08:14:55

标签: java android

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

}

My page here :

提前致谢!!

3 个答案:

答案 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"位于。

的XML中添加+

然后创建方法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并根据您的要求更改其值。

相关问题