简体   繁体   English

如何获取自定义ListView中EditText的所有值

[英]How get to all value of EditText in Custom ListView

Good day guys, I successfully populated my custom-listview-layout in my activity, but the problem is I can't get all the value of populated EditText in my listview, please help me what approach should I do, thanks 大家好,我在活动中成功填充了custom-listview-layout,但是问题是我无法在listview中获得所有填充的EditText的值,请帮助我,我应该怎么做,谢谢

在此处输入图片说明

Picture Adapter.java 图片适配器.java

    public View getView(int position, View convertView, ViewGroup parent) {
    View row;
    row = convertView;
    final dataHandler handler;
    if(convertView == null){
        LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate( R.layout.row_layout,parent, false);
        handler = new dataHandler();
        handler.pictures = (ImageView) row.findViewById(R.id.pictures);
        handler.name = (TextView) row.findViewById(R.id.picturename);
        handler.price= (EditText) row.findViewById(R.id.price);
        handler.add = (Button) row.findViewById(R.id.btnplus);
        handler.minus = (Button) row.findViewById(R.id.btnminus);
        row.setTag(handler);
    }else{
        handler = (dataHandler) row.getTag();
    }
    PSP psp;
    psp =(PSP) this.getItem(position);
    Picasso.with(getContext()).load(psp.getPicture()).resize(200, 155).into(handler.pictures);
    handler.name.setText(psp.getName());
    handler.price.setText(psp.getPrice());
return row;
}

MainActivity.java MainActivity.java

    PictureAdapter adapter;
listView = (ListView) findViewById(R.id.ls);
adapter = new PictureAdapter(this,R.layout.row_layout);
listView.setAdapter(adapter);
try {
    JSONArray users = response.getJSONArray("user");
    for (int x = 0; x <= users.length()-1; x++) {
        JSONObject user = users.getJSONObject(x);
        PSP psp = new PSP(imageUri+user.getString("image")+".png",user.getString("username"),"0");
        adapter.add(psp);
    }

} catch (JSONException e) {
    e.printStackTrace();
}

PSP.java PSP.java

public class PSP

{ {

private String picture;
private  String name;
private String price;

public String getPicture() {
    return picture;
}

public PSP(String picture, String name, String price){
    this.setPicture(picture);
    this.setName(name);
    this.setPrice(price);
}

public void setPicture(String picture) {
    this.picture = picture;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPrice() {
    return price;
}

public void setPrice(String price) {
    this.price = price;
}

} }

row_layout.xml row_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="80dp"
android:background="#000000">

<ImageView
    android:id="@+id/pictures"
    android:layout_width="100dp"
    android:layout_height="75dp"
    android:layout_alignParentLeft="true"

    />
<TextView
    android:id="@+id/picturename"
    android:layout_width="115dp"
    android:layout_height="75dp"
    android:layout_toRightOf="@+id/pictures"
    android:text="Kim Domingo"
    android:gravity="center"
    android:textColor="#FFFFFF"
    />
<Button
    android:id="@+id/btnplus"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:gravity="center"
    android:text="+"
    android:textSize="50px"
    android:layout_centerVertical="true"
    android:layout_toRightOf="@+id/picturename"
    android:layout_toEndOf="@+id/picturename"
    />


<EditText
    android:id="@+id/price"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:focusable="false"
    android:textColor="#FFFFFF"
    android:inputType="number"
    android:gravity="center"
    android:layout_centerVertical="true"
    android:layout_toRightOf="@+id/btnplus"
    android:layout_toEndOf="@+id/btnplus" />

<Button
    android:id="@+id/btnminus"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:gravity="center"
    android:text="-"
    android:textSize="50px"
    android:layout_centerVertical="true"
    android:layout_toRightOf="@+id/price"
    android:layout_toEndOf="@+id/price" />

<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="#FFFFFF"
    android:layout_below="@+id/pictures"
    android:id="@+id/editText"></View>

I created same before like this 我以前这样创造过

在此处输入图片说明

You can use the HashMap map = new HashMap<>(); 您可以使用HashMap map = new HashMap <>(); for what item user click. 用户点击哪个项目。 I assume that you use two button click are available in adapter class if not then add it. 我假设您使用两个按钮单击(如果没有,则在适配器类中可用),然后添加它。

Step 1 First Declare the HashMap map = new HashMap<>(); 步骤1首先声明HashMap地图= new HashMap <>(); in adapter. 在适配器中。

Step 2 Then put value in HashMap map.put("key","value"); 步骤2然后将value放入HashMap map.put(“ key”,“ value”); This code put in both plus and minus button click event. 这段代码同时放入了加号和减号click click事件。

Step 3 Call ShowHashMapValue(); 步骤3调用ShowHashMapValue(); method below to the map.put("key","value"); 下面的方法到map.put(“ key”,“ value”); for see the HashMap values check logcat for that. 有关的信息,请参见HashMap值检查logcat。

Compare this adapter code for understand easily if any problem just comment below. 比较此适配器代码,以便轻松理解,如果有任何问题,请在下面评论。

ListAdapter.java ListAdapter.java

    public class ListAdapter extends BaseAdapter {

    public ArrayList<Integer> quantity = new ArrayList<Integer>();
    public ArrayList<Integer> price = new ArrayList<Integer>();
    private String[] listViewItems, prices, static_price;
    TypedArray images;
    View row = null;

    static String get_price, get_quntity;
    int g_quntity, g_price, g_minus;

    private Context context;
    CustomButtonListener customButtonListener;

    static HashMap<String, String> map = new HashMap<>();


    public ListAdapter(Context context, String[] listViewItems, TypedArray images, String[] prices) {
        this.context = context;
        this.listViewItems = listViewItems;
        this.images = images;
        this.prices = prices;

        for (int i = 0; i < listViewItems.length; i++) {
            quantity.add(0);
        }
    }

    public void setCustomButtonListener(CustomButtonListener customButtonListner) {
        this.customButtonListener = customButtonListner;
    }

    @Override
    public int getCount() {
        return listViewItems.length;
    }

    @Override
    public String getItem(int position) {
        return listViewItems[position];
    }


    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        final ListViewHolder listViewHolder;
        if (convertView == null) {
            LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = layoutInflater.inflate(R.layout.activity_custom_listview, parent, false);
            listViewHolder = new ListViewHolder();
            listViewHolder.tvProductName = (TextView) row.findViewById(R.id.tvProductName);
            listViewHolder.ivProduct = (ImageView) row.findViewById(R.id.ivproduct);
            listViewHolder.tvPrices = (TextView) row.findViewById(R.id.tvProductPrice);
            listViewHolder.btnPlus = (ImageButton) row.findViewById(R.id.ib_addnew);
            listViewHolder.edTextQuantity = (EditText) row.findViewById(R.id.editTextQuantity);
            listViewHolder.btnMinus = (ImageButton) row.findViewById(R.id.ib_remove);
            static_price = context.getResources().getStringArray(R.array.Price);
            row.setTag(listViewHolder);
        } else {
            row = convertView;
            listViewHolder = (ListViewHolder) convertView.getTag();
        }

        listViewHolder.ivProduct.setImageResource(images.getResourceId(position, -1));
        listViewHolder.edTextQuantity.setText(quantity.get(position) + "");
        listViewHolder.tvProductName.setText(listViewItems[position]);
        listViewHolder.tvPrices.setText(prices[position]);


        listViewHolder.btnPlus.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (customButtonListener != null) {
                    customButtonListener.onButtonClickListener(position, listViewHolder.edTextQuantity, 1);

                    quantity.set(position, quantity.get(position) + 1);
                    //price.set(position, price.get(position) + 1);

                    row.getTag(position);

                    get_price = listViewHolder.tvPrices.getText().toString();

                    g_price = Integer.valueOf(static_price[position]);

                    get_quntity = listViewHolder.edTextQuantity.getText().toString();
                    g_quntity = Integer.valueOf(get_quntity);

                    map.put("" + listViewHolder.tvProductName.getText().toString(), " " + listViewHolder.edTextQuantity.getText().toString());
//                    Log.d("A ", "" + a);
//                    Toast.makeText(context, "A" + a, Toast.LENGTH_LONG).show();
//                    Log.d("Position ", "" + position);
//                    System.out.println(+position + " Values " + map.values());
                    listViewHolder.tvPrices.getTag();
                    listViewHolder.tvPrices.setText("" + g_price * g_quntity);
                    ShowHashMapValue();

                }


            }

        });
        listViewHolder.btnMinus.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (customButtonListener != null) {

                    customButtonListener.onButtonClickListener(position, listViewHolder.edTextQuantity, -1);
                    if (quantity.get(position) > 0)
                        quantity.set(position, quantity.get(position) - 1);

                    get_price = listViewHolder.tvPrices.getText().toString();
                    g_minus = Integer.valueOf(get_price);
                    g_price = Integer.valueOf(static_price[position]);
                    int minus = g_minus - g_price;
                    if (minus >= g_price) {
                        listViewHolder.tvPrices.setText("" + minus);
                    }
                    map.put("" + listViewHolder.tvProductName.getText().toString(), " " + listViewHolder.edTextQuantity.getText().toString());
                    ShowHashMapValue();
                }
            }
        });


        return row;
    }

    private void ShowHashMapValue() {
        /**
         * get the Set Of keys from HashMap
         */
        Set setOfKeys = map.keySet();

/**
 * get the Iterator instance from Set
 */
        Iterator iterator = setOfKeys.iterator();

/**
 * Loop the iterator until we reach the last element of the HashMap
 */
        while (iterator.hasNext()) {
/**
 * next() method returns the next key from Iterator instance.
 * return type of next() method is Object so we need to do DownCasting to String
 */
            String key = (String) iterator.next();

/**
 * once we know the 'key', we can get the value from the HashMap
 * by calling get() method
 */
            String value = map.get(key);

            System.out.println("Key: " + key + ", Value: " + value);
        }
    }
}

So so here is logic. 所以这就是逻辑。 You need to declare a boolean in PSP. 您需要在PSP中声明布尔值。 by default set it to false . 默认情况下将其设置为false

Now when + button will be triggered you need to set that boolean check to true 现在,当+按钮被触发时,您需要将布尔check设置为true

then in your set price create this logic. 然后在您的设定价格中创建此逻辑。

public String getPrice() {

    if(check==true){
      price++;
     }
    else{
     price--;
    }
    return price;
}

If i correctly understand you then this surely will help you. 如果我正确理解您,那肯定会对您有所帮助。 Good Luck! 祝好运!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM