2017-12-29 14 views
-3

私を助けてください。 firebaseからユーザー名を1回だけ表示したいと思います。ユーザーはfirebaseに複数のレコードを持っていますが、注文するユーザーの名前を表示したいだけです。ユーザーは複数の注文を行うことができますが、名前を一度表示したいだけです。ArrayList内の重複した項目名を削除してください

私は多くの方法を試みましたが、成功できません。これについて知っている誰か?どうもありがとうございました。

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

ようこそスタックオーバーフロー!しばらく時間を取って[質問する](https://stackoverflow.com/help/how-to-ask)のガイドを参照してください。コードやテキストを画像として投稿しないでください!(スクリーンリーダー!)画像を正しくフォーマットしてください。![alt text](image url) '。 [mcve]を作成するにはしばらく時間を取ってください。誰でもあなたの問題を理解しやすく、答えが正しいことを確認するのが簡単です。他の人があなたの問題に対処するのに要する時間が短いほど、回答が得られる可能性が高いことに注意してください。 – akraf

答えて

0

あなたがキーと値に依存しているので、なぜ代わりにマップを使用していませんか?マップにはキーと値があり、キーを取得することで、キーを持つアイテムが存在するかどうかをチェックすることができます。リストを反復して重複を見つける必要はありません。

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

値は、その後のアイテムを入れる既存のデータ

を維持するのArrayListです:あなたはそれを初期化する必要があり

まず

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 

} 

とクリアマップとされますリストと同じ

関連する問題