2017-12-06 5 views
2

Ich arbeite an einer Android-App, wo Benutzer die Lebensmittelmenge auswählen und zum Kassenbildschirm wechseln, um ähnlich wie foodpanda, swiggy zu kaufen.Wie erhält man den Namen des Artikels, der vom Benutzer in der nächsten Aktivität in Android überprüft wird?

Ich kann jedoch den Inhalt des ausgewählten Artikels nicht mit der Menge abrufen. Es zeigt den Paketnamen anstelle des Elementnamens an.

-Code -

public class Food implements Parcelable,Serializable { 
    String Foodname; 
    int CartQuantity = 0; 
    double FoodPrice; 

    public Food(String Foodname, int cartQuantity, double FoodPrice) { 
     this.Foodname = Foodname; 
     this.CartQuantity = cartQuantity; 
     this.FoodPrice = FoodPrice; 
    } 

    protected Food(Parcel in) { 
     Foodname = in.readString(); 
     CartQuantity = in.readInt(); 
     FoodPrice = in.readDouble(); 
    } 

    public static final Creator<Food> CREATOR = new Creator<Food>() { 
     @Override 
     public Food createFromParcel(Parcel in) { 
      return new Food(in); 
     } 

     @Override 
     public Food[] newArray(int size) { 
      return new Food[size]; 
     } 
    }; 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
      dest.writeString(this.Foodname); 
      dest.writeInt(this.CartQuantity); 
      dest.writeDouble(this.FoodPrice); 
    } 
} 

ListAdapter.class -

public class ListAdapter extends BaseAdapter { 
    public ArrayList<Food> listproducts; 
    private Context context; 

    public ListAdapter(Context context,ArrayList<Food> listproducts){ 
     this.context=context; 
     this.listproducts=listproducts; 
    } 
    @Override 
    public int getCount() { 
     return listproducts.size(); 
    } 

    @Override 
    public Food getItem(int position) { 
     return listproducts.get(position); 
    } 

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

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View row; 
     final ListViewHolder listViewHolder; 
     if(convertView == null) 
     { 
      LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = layoutInflater.inflate(R.layout.list_item,parent,false); 
      listViewHolder = new ListViewHolder(); 
      listViewHolder.foodName = row.findViewById(R.id.lblListItem); 
      listViewHolder.foodPrice = row.findViewById(R.id.lblListItem1); 
      listViewHolder.cartQuantity = row.findViewById(R.id.integer_number); 
      listViewHolder.increment = row.findViewById(R.id.increase); 
      listViewHolder.decrement = row.findViewById(R.id.decrease); 
      row.setTag(listViewHolder); 
     } 
     else 
     { 
      row=convertView; 
      listViewHolder= (ListViewHolder) row.getTag(); 
     } 
     final Food food=getItem(position); 

     listViewHolder.foodName.setText(food.Foodname); 
     listViewHolder.foodPrice.setText(food.FoodPrice+" $"); 
     listViewHolder.cartQuantity.setText(food.CartQuantity+""); 
     listViewHolder.increment.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) 
      { 
       updateQuantity(position,listViewHolder.cartQuantity,1); 
      } 
     }); 
     //listViewHolder.edTextQuantity.setText("0"); 
     listViewHolder.decrement.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       updateQuantity(position,listViewHolder.cartQuantity,-1); 

      } 
     }); 

     return row; 
    } 

    private void updateQuantity(int position, TextView edTextQuantity, int value) { 

     Food food = getItem(position); 
     if(value > 0&&food.CartQuantity<10) 
     { 
      food.CartQuantity = food.CartQuantity + 1; 
     } 
     else 
     { 
      if(food.CartQuantity > 0) 
      { 
       food.CartQuantity = food.CartQuantity - 1; 
      } 

     } 
     edTextQuantity.setText(food.CartQuantity+""); 
    } 
} 

Dies ist, was ich versucht habe, und das ist, was ich von diesem Code bekommen.

Aktivität, wo der Benutzer die Einzelteile wählen

image

Aktivität zu bestellen, der die ausgewählten Elemente angezeigt werden durch den Benutzer

image2

Statt zeigt den Artikelnamen, Preis und Menge, zeigt es den Paketnamen an. Wie kann ich die erforderlichen Werte durch Ändern des Codes erhalten?

+0

Bitte teilen Sie Ihren Code mit mir, also werde ich Änderungen daran vornehmen. –

+0

@ankitpatidar Sie meinen das komplette Projekt? – Sreyance

+0

Ja, wenn du kannst? –

Antwort

1

Hier sind die Änderungen an Ihrem Code:

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

static int count=0; 
private Context _context; 

HashMap<String,Food> selectedItems; 

public List<String> listDataHeader; // header titles 

// child data in format of header title, child title 
public HashMap<String, ArrayList<Food>> _listDataChild; 

CheckOutItems checkOutItems; 

public ExpandableListAdapter(Context context, List<String> listDataHeader, 
          HashMap<String, ArrayList<Food>> listChildData) { 
    this._context = context; 
    this.listDataHeader = listDataHeader; 
    this._listDataChild = listChildData; 

    selectedItems = new HashMap<>(); 

    checkOutItems = (CheckOutItems)context; 

} 

@Override 
public Food getChild(int groupPosition, int childPosititon) { 
    return this._listDataChild.get(this.listDataHeader.get(groupPosition)).get(childPosititon); 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) { 
    return childPosition; 
} 

Button button; 
@Override 
public View getChildView(final int groupPosition, final int childPosition, 
         boolean isLastChild, View convertView, ViewGroup parent) { 

    View row; 
    final ListViewHolder listViewHolder; 
    if(convertView == null) 
    { 
     LayoutInflater layoutInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = layoutInflater.inflate(R.layout.list_item,parent,false); 

     listViewHolder = new ListViewHolder(); 
     listViewHolder.foodName = row.findViewById(R.id.lblListItem); 
     listViewHolder.foodPrice = row.findViewById(R.id.lblListItem1); 
     listViewHolder.cartQuantity = row.findViewById(R.id.integer_number); 
     listViewHolder.increment = row.findViewById(R.id.increase); 
     listViewHolder.decrement = row.findViewById(R.id.decrease); 
     listViewHolder.addButton = row.findViewById(R.id.addbtn); 
     row.setTag(listViewHolder); 
    } 
    else 
    { 
     row=convertView; 
     listViewHolder= (ListViewHolder) row.getTag(); 
    } 
    final Food food=getChild(groupPosition,childPosition); 

    listViewHolder.foodName.setText(food.Foodname); 
    listViewHolder.foodPrice.setText(food.FoodPrice+" $"); 
    listViewHolder.cartQuantity.setText(food.CartQuantity+""); 
    listViewHolder.increment.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) 
     { 
      updateQuantity(groupPosition,childPosition,listViewHolder.cartQuantity,1); 
     } 
    }); 
    //listViewHolder.edTextQuantity.setText("0"); 
    listViewHolder.decrement.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      updateQuantity(groupPosition,childPosition,listViewHolder.cartQuantity,-1); 

     } 
    }); 

    listViewHolder.addButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      selectedItems.put(food.Foodname,food); 
      checkOutItems.sendItems(selectedItems); 
     } 
    }); 

    return row; 
} 

private void updateQuantity(int group,int position, TextView edTextQuantity, int value) { 

    Food food = getChild(group,position); 
    if(value > 0&&food.CartQuantity<10) 
    { 
     food.CartQuantity = food.CartQuantity + 1; 
     count++; 


    } 
    else 
    { 
     if(food.CartQuantity > 0) 
     { 
      food.CartQuantity = food.CartQuantity - 1; 
      count--; 

     } 

    } 
    edTextQuantity.setText(food.CartQuantity+""); 
} 


@Override 
public int getChildrenCount(int groupPosition) { 
    return _listDataChild.get(listDataHeader.get(groupPosition)) 
      .size(); 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return this.listDataHeader.get(groupPosition); 
} 

@Override 
public int getGroupCount() { 
    return this.listDataHeader.size(); 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
         View convertView, ViewGroup parent) { 
    String headerTitle = (String) getGroup(groupPosition); 
    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_group, null); 
    } 

    TextView lblListHeader = (TextView) convertView 
      .findViewById(R.id.lblListHeader); 
    lblListHeader.setTypeface(null, Typeface.BOLD); 
    lblListHeader.setText(headerTitle); 

    return convertView; 
} 

@Override 
public boolean hasStableIds() { 
    return false; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) { 
    return true; 
} 

interface CheckOutItems 
{ 
    public void sendItems(HashMap<String,Food> selectedItems); 
} 
} 

Und hier ist Link von Google Drive für das gesamte Projekt:
https://drive.google.com/open?id=15utf5kuJJHUXDR1bOLeb7DAIDJ54RwOW

+0

Vielen Dank für Ihre Korrektur. Sehr geschätzt :) – Sreyance

+0

Bitte upvote meinen Code. –

0

Sie müssen den Objektverweis für setText verwenden. Etwas wie

Essen f = getFood(); // Hat etwas Logik

// Einstellungstext wie folgt.

textView.setText (f); // Falsch

Probieren Sie etwas wie diese.

textView.setText (f.FoodName)); // Holen Sie das richtige Attribut vom Objekt, um den genauen Namen anzuzeigen.

0

Was ich aus Ihrer Frage verstehen ist, dass Sie das bekommen Produkte ausgewählt in Lebensmitteladapter in Ihrer nächsten Aktivität.

erstens ein Verfahren in Ihrem Adapter erstellen:

public ArrayList<Food> getSelectedProducts(){ 
    ArrayList<Food> selected = new ArrayList<>(); 
    for(Food food:listProducts){ 
     if(food.getCartQuantity() > 0){ 
     selected.add(food); 
     } 
    } 
    return selected; 
} 

nun die ausgewählten Elemente in der aktuellen Aktivität erhalten:

ArrayList<Food> products = adapter.getSelectedProducts(); 

dann die Produkte in der Absicht, setzen Sie Ihre zum nächsten zu navigieren verwenden Aktivität als:

Intent intent = new Intent("your intent"); 
intent.putExtra("data", (Serializable)products); 
startActivity(intent); 

In Ihrer nächsten Aktivität erhalten Sie ausgewählte Elemente wie:

ArrayList<Food> selectedProducts = getIntent().getSerializableExtra("data"); 

das ist es!

Verwandte Themen