2017-12-29 2 views
-3

Bitte helfen Sie mir. Ich möchte den Benutzernamen nur einmal von Firebase zeigen. Obwohl der Benutzer mehrere Datensätze in der Firebase hat, möchte ich nur den Namen des Benutzers anzeigen, der die Bestellung ausführt. Der Benutzer kann mehrere Bestellungen machen, aber ich möchte nur einmal seinen Namen anzeigen.Entfernen Sie doppelte Objektname in ArrayList

Ich habe viele Möglichkeiten versucht, kann aber nicht erfolgreich sein. Jemand, der davon weiß? Vielen Dank.

This is my firebase

This is the result I get

public void onCreate(Bundle savedInstanceState) { 


     UID = this.getArguments().getString("UID"); 


     mDatabase = FirebaseDatabase.getInstance().getReference(); 
     mStorage = FirebaseStorage.getInstance(); 

     mItems = new ArrayList<>(); 
     wordDulicate = new ArrayList<>(); 
     tempList = new ArrayList<>(); 

     if(UID != null){ 
      mItemsKey = new ArrayList<>(); 
      mOrderedItemRef = mDatabase.child("OrderedItem"); 
      Log.d(TAG, " mOrderedItemRef:" + mOrderedItemRef); 
      mOrderedItemVEL = mOrderedItemRef.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        mItems.clear(); 
        mItemsKey.clear(); 
        wordDulicate.clear(); 
        Log.d(TAG, "onDataChange"); 
        for (DataSnapshot d : dataSnapshot.getChildren()) { 
         OrderedItem orderedItem = d.getValue(OrderedItem.class); 
         Log.d(TAG, "orderedItem:" + orderedItem.getUserName()); 
         mItems.add(orderedItem); 
         mItemsKey.add(d.getKey()); 
        } 
        updateUI(); 

       } 

       @Override 
       public void onCancelled (DatabaseError databaseError){ 
        Log.d(TAG, "get item databaseError: "+databaseError); 
       } 
      }); 
     } 
     else{ 
      Log.d(TAG, "UID: "+UID); 

     } 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public void onDestroy(){ 
     super.onDestroy(); 
     // if (mItemRef != null) mItemRef.removeEventListener(mItemVEL); 
    } 

    @Override 
    public void onDetach(){ 
     super.onDetach(); 
     // if (mItemRef != null) mItemRef.removeEventListener(mItemVEL); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_admin_list_user_order, container, false); 
     mItemRecyclerView = (RecyclerView) view.findViewById(R.id.admin_order_recycler_view); 
     DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mItemRecyclerView.getContext(), new LinearLayoutManager(getActivity()).getOrientation()); 
     mItemRecyclerView.addItemDecoration(dividerItemDecoration); 
     mItemRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     return view; 
    } 

    private void updateUI(){ 
     Log.d(TAG, "Enter updateUI(); mItems: " + mItems); 
     mAdapter = new ItemAdapter(mItems); 
     mItemRecyclerView.setAdapter(mAdapter); 
    } 

    private class ItemHolder extends RecyclerView.ViewHolder{ 
     OrderedItem mItems; 
     TextView mNameTextView; 

     ItemHolder(final View itemView){ 
      super(itemView); 
      mNameTextView = (TextView) itemView.findViewById(R.id.textview_username); 


      /* if (UID != null) { 
       itemView.setOnClickListener(new View.OnClickListener() { 
        @SuppressLint("LongLogTag") 
        @Override 
        public void onClick(View view) { 
         Log.d(TAG, "UID != null"); 
         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

         builder 
           .setMessage("Delete This Item?") 
           .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int id) { 
             deleteItem(mItems); 
            } 
           }).setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           // User cancelled the dialog 
          } 
         }); 

         AlertDialog dialog = builder.create(); 
         dialog.show(); 
        } 
       }); 
      }*/ 
     } 

     void bindData(OrderedItem s){ 
      mItems = s; 
      mNameTextView.setText(s.getUserName()); 



     } 
    } 

    private class ItemAdapter extends RecyclerView.Adapter<ItemHolder>{ 
     private ArrayList<OrderedItem> mItems; 

     ItemAdapter(ArrayList<OrderedItem> Items){ 
      mItems = Items; 
     } 

     @Override 
     public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); 
      View view = layoutInflater.inflate(R.layout.admin_listed_user_order,parent,false); 
      return new ItemHolder(view); 
     } 

     @Override 
     public void onBindViewHolder(ItemHolder holder, int position) { 
      OrderedItem s = mItems.get(position); 
      holder.bindData(s); 
     } 

     @Override 
     public int getItemCount() { 
      return mItems.size(); 
     } 

    } 

} 
+0

Willkommen bei Stack Overflow! Nehmen Sie sich einen Moment Zeit, um unseren Leitfaden zu [how to ask] (https://stackoverflow.com/help/how-to-ask) zu lesen. Bitte geben Sie keinen Code oder Text als Bild (Screenreader!) Ein. Bitte formatieren Sie die Bilder korrekt '! [Alt text] (image url)'. Bitte nehmen Sie sich etwas Zeit, um ein [mcve] zu erstellen, das es für jeden einfacher macht, Ihr Problem zu verstehen und zu verifizieren, dass die Antwort korrekt ist. Beachten Sie, je weniger Zeit andere Personen benötigen, um mit Ihrem Problem fertig zu werden, desto wahrscheinlicher werden Sie eine Antwort erhalten. – akraf

Antwort

0

Da Sie auf einem Schlüssel und einem Wert verlassen, eine Karte, warum nicht stattdessen verwenden? Maps haben einen Schlüssel und einen Wert, und Sie können überprüfen, ob ein Element mit einem Schlüssel vorhanden ist, indem Sie den Schlüssel abrufen, anstatt die Liste durchlaufen zu müssen und Duplikate zu finden.

Zuerst müssen Sie es initialisieren:

Map<String, ArrayList<OrderedItem>> items = new HashMap<>(); 

Der Wert ein Arraylist ist alle vorhandenen Daten

dann die Elemente setzen zu halten:

for (DataSnapshot d : dataSnapshot.getChildren()) { 
    OrderedItem orderedItem = d.getValue(OrderedItem.class); 
    Log.d(TAG, "orderedItem:" + orderedItem.getUserName()); 
    items.putIfAbsent(d.getKey(), new ArrayList<>());//create a list if it doesn't exist 
    items.get(d.geyKey()).add(orderedItem);//add the item 

} 

und mit einer Karte Clearing ist das gleiche wie mit den Listen

Verwandte Themen