gpt4 book ai didi

android - 如何获取多个Spinner View中的Item数量并计算总价

转载 作者:太空狗 更新时间:2023-10-29 12:43:32 25 4
gpt4 key购买 nike

我在 ListView (多个微调器)中为不同的产品实现微调器,其图像在左侧,价格在右侧。用户可以选择每种产品的数量(数量)。

根据我的需要,这项工作在一个从 BaseAdapter 扩展的类中进行。在微调器的 getView 中,我设置了微调器 View 。

现在我想要:

1) 当用户在 Spinner 中选择一个项目时,该项目的价格计算为总价,右侧的 TextView 文本设置为该总价。现在它运行良好,但是当我向上滚动列表时,Spinner 将其值更改为旧值(即位置 0 处的值)而不是新值。

2) 我想做的另一件事是将来自不同微调器的所有这些值保存在一个数组中,以便最后将所有不同微调器的值进一步计算为总计(在首先,我计算了单个产品的值(value),假设该产品的价格是 50 美元,用户选择了他想要 20 件该产品,所以 totall=20x50)。

3) 我想要的另一件事是获取在一个微调器中选择的项目数。并以同样的方式将每个微调器的这些数字保存在另一个数组中,以便最后将这些都计算为所有产品的总数。

下面是图片,很抱歉我的问题太长了,但我真的很想解决这个问题。如果您希望我发布更多内容,请告诉我。

enter image description here

当我选择项目时

enter image description here

当我滚动屏幕时,微调器中的所有值和 TextView 中的价格都重置为初始位置

enter image description here

这是我的代码

     public class Base_Adapter extends BaseAdapter
{
ImageView image;
TextView name, price;

Context context ;
ArrayList<ItemDetails> IDetails; //The item class which have methods and fields
RelativeLayout R_Layout;
Activity activit;
public Base_Adapter(Context context , ArrayList<ItemDetails> li)
{
this.context = context;
IDetails = li;

}

public void setLayout(Activity activity, RelativeLayout layout){
R_Layout = layout;
this.activit = activity;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return IDetails.size();
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}

//////// Get View For Spinner////
@Override
public View getView(final int position, View CV, ViewGroup parent) {
// TODO Auto-generated method stub


LayoutInflater infleter = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(CV == null)
{
CV = infleter.inflate(R.layout.base_adapter, null);
}

final ItemDetails item = IDetails.get(position);
int min =1;
int max = Integer.parseInt(item.totall_Available());
ArrayList<String> A_list= new ArrayList<String>();

for(int i=1;i<=max;i++)
{
A_list.add("Number of Items :"+i);
}

image = (ImageView) CV.findViewById(R.id.Item_image);
name = (TextView) CV.findViewById(R.id.item_name);
price = (TextView) CV.findViewById(R.id.item_price);

final Spinner quantity = (Spinner) CV.findViewById(R.id.items);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.spinner_textview, A_list);
quantity.setAdapter(adapter);

//String selectedItem = (String) quantity.getSelectedItem();

name.setText(item.name());

/// ItemClick/////

quantity.setOnItemSelectedListener(new OnItemSelectedListener()
{
public void onItemSelected(AdapterView<?> arg0, View arg1, int i, long arg3)
{

if(i>0){
float cal=Float.parseFloat(item.Fisrtprise());

float cal3=cal*i;
price.setText(""+String.format("%.2f", cal3).replace(".", ","));

String s = Float.toString(cal3);
item.Totalprice=s;
}
else{
price.setText(""+String.format("%.2f", Float.parseFloat(item.Fisrtprise())).replace(".", ","));
}
}

public void onNothingSelected(AdapterView<?> arg0){

}

});



return CV;


}

这是 IDetails 类

@SuppressWarnings("serial")
public class IDetails implements Serializable
{


ContentValues colmnValues;
private int no_of_items;
public float Totalprice;


public IDetails(ContentValues values )
{
colmnValues = values;
}


public String title() {
return getValue(colmnValues.get("title"));
}



public void setNo_of_items(int no_of_items) {
this.no_of_items = no_of_items;
}
public int getNo_of_items() {
return no_of_items;
}


public void setTotalprice(float Totalprice) {
this.Totalprice = Totalprice;
}
public float getTotalprice() {
return Totalprice;
}


public String imageUrl() {
return getValue(colmnValues.get("imageUrl"));
}

public String pprice() {
return getValue(colmnValues.get("Realprice"));
}

public String stock() {
return getValue(colmnValues.get("stock"));
}




private String getValue(Object obj){
if(obj == null){
return "";
}
return (String) obj;
}


}

最佳答案

我只是更新了你的代码,没有创建新的。首先我会回答这三个问题。

  1. 旋转器在滚动后重置,因为适配器调用getView() 方法,它们再次初始化为默认值。为了避免这种情况并取回您之前选择的值,您所要做的就是将它们保存在 map 中并分配回来。在以下代码“selectedItem”是我用来存储选定金额的 map 对于每个微调器。
  2. 要获得总金额,您可以使用另一个用于存储的 map 每个微调器的总价。在我使用的以下代码中“totalPrices”。在 onItemSelected() 中,我们可以放入总计特定微调器的数量。在“BUY”的 onclick() 方法中按钮,您可以通过调用 getTotalPrice() 方法访问此 map 是适配器类。
  3. 这很简单。我们不必获得单独的数组。我们可以得到此信息使用用于存储的“selectedItem” map 微调器的选定值。与总价相同,您可以获得此 map 使用 getTotalItems()

此外,在 onItemSelected() 方法中的价格计算中,您使用了“i”来乘以商品价格。它应该是 (i+1)。因为“i”是列表在微调器中的位置。它从 0 开始。

这是 Base_Adapter 类

public class Base_Adapter extends BaseAdapter{

ImageView image;
TextView name, price;

private HashMap<Integer,Integer> selectedItem=new HashMap<Integer, Integer>();
private HashMap<Integer, String> totalPrices=new HashMap<Integer, String>();

Context context ;
ArrayList<ItemDetails> IDetails; //The item class which have methods and fields
RelativeLayout R_Layout;
Activity activit;


public Base_Adapter(Context context , ArrayList<ItemDetails> li) {
// TODO Auto-generated constructor stub
this.context = context;
IDetails = li;

}

public void setLayout(Activity activity, RelativeLayout layout){
R_Layout = layout;
this.activit = activity;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return IDetails.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}

public HashMap<Integer,Integer> getTotalItems(){
return selectedItem;
}

public HashMap<Integer, String> getTotalPrice(){
return totalPrices;
}

//////// Get View For Spinner////
@Override
public View getView(final int position, View CV, ViewGroup parent) {
// TODO Auto-generated method stub

final ItemDetails item = IDetails.get(position);
int min =1;
int max = Integer.parseInt(item.stock());



LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView=inflater.inflate(R.layout.base_adapter, parent,false);

ArrayList<String> A_list= new ArrayList<String>();

for(int i=1;i<=max;i++)
{
A_list.add("Number of Items :"+i);
}


ImageView image=(ImageView) rowView.findViewById(R.id.item_image);


TextView nameTextView=(TextView) rowView.findViewById(R.id.item_name);
nameTextView.setText(item.title());

final TextView price=(TextView) rowView.findViewById(R.id.item_price);

Spinner quantity=(Spinner) rowView.findViewById(R.id.items);

ArrayAdapter<String > quatity=new ArrayAdapter<String>(context, R.layout.spinner_textview, R.id.item_list, A_list);
quantity.setAdapter(quatity);


if(selectedItem.get(position) != null){
//This should call after setAdapter
quantity.setSelection(selectedItem.get(position));
}

quantity.setOnItemSelectedListener(new OnItemSelectedListener()
{

public void onItemSelected(AdapterView<?> arg0, View arg1, int i, long arg3)
{


if(i>0){
selectedItem.put(position, i);

i=i+1;
float cal=Float.parseFloat(item.price());

float cal3=cal*i;
price.setText(""+String.format("%.2f", cal3).replace(".", ","));

item.Totalprice= cal3;
}
else{
price.setText(""+String.format("%.2f", Float.parseFloat(item.price())).replace(".", ","));

}
totalPrices.put(position, price.getText().toString());

}

public void onNothingSelected(AdapterView<?> arg0){

}

});

return rowView;

}
}

因此在您的 Activity 类中为“BUY”按钮实现onclick 方法。

public void getTotal(View view){
HashMap<Integer, Integer>totalItems=adapter.getTotalItems();
HashMap<Integer, String> totalPrices=adapter.getTotalPrice();
for(int i=0;i<totalItems.size();i++){
if(totalItems.get(i) != null){
System.out.println("Spinner No"+(i+1)+"Items :"+(totalItems.get(i)+1));
System.out.println("Spinner No "+(i+1)+"total price "+totalPrices.get(i));
}else{
System.out.println("Spinner No"+(i+1)+"Items : 1");
}
}

关于android - 如何获取多个Spinner View中的Item数量并计算总价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21709115/

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