簡體   English   中英

單擊內部列表視圖按鈕時如何從列表視圖中獲取每個編輯文本值

[英]How to get each edittext value from the listview while click inside listview button

我有列表視圖。 每個列表在我的自定義適配器中包含復選框、編輯文本和兩個按鈕。 當我單擊加號按鈕時,我想增加相應位置的編輯文本值。 我不知道如何在單擊加號按鈕時從 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;
}

}

我的頁面在這里:

提前致謝!!

嘗試這樣做以避免 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();
        }
    });

獲取特定位置的編輯文本值:

list.get(position).getCount();

如果您想獲得 edittext 的值,您可能會遇到我在開頭所說的錯誤。

在 XML 中添加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

    }

看看這個以獲取更多參考。

您可以在適配器的getView()方法中將當前視圖設置為按鈕,在button.setOnClickListener()您可以獲取此視圖並執行任何您想做的事情。 使用setTag()getTag()

例子:

在適配器的getView()中:

btnPlus = (Button) convertView.findViewById(R.id.btnPlusdessert);
btnPlus.setTag(R.integer.btnplusview,convertView);

按鈕的 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 獲得其他文本視圖或按鈕或任何內容。

假設您單擊第 2 行的 + 按鈕,則第 2 行的整個 rowview 將在 tempView 中膨脹,您可以獲得第 2 行的編輯文本並根據您的要求更改其值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM