2017-06-25 16 views
0

カスタムアダプタを持つListViewのFirebaseリストからユーザーチャットを表示したいとします。しかし、何とかそれは動作しません。私はlogcatのデータを見てみると応答が出ますが、リストをCustomAdapterに渡すとListViewに何も表示されません。どうした?CustomAdapterはリストビュー内にアイテムを表示しません

マイアダプタ:

public class ChatAdapter extends ArrayAdapter<String> { 

    private Activity context; 
    private List<Chats> chatsList = new ArrayList<>(); 

    public ChatAdapter(Activity Context, List<Chats> chatsList) { 
     super(Context, R.layout.abc_main_chat_item); 
     this.context = Context; 
     this.chatsList = chatsList; 
    } 

    @Override 
    public View getView(final int position, final View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View listViewItem = inflater.inflate(R.layout.abc_main_chat_item, null, true); 

     TextView tvusername = (TextView) listViewItem.findViewById(R.id.group_name); 
     TextView tvuid = (TextView) listViewItem.findViewById(R.id.useruid); 
     TextView tvlastmessage = (TextView) listViewItem.findViewById(R.id.latestMessage); 
     TextView tvlastmessagetime = (TextView) listViewItem.findViewById(R.id.latestMessageTime); 
     ImageView ivphoto = (ImageView) listViewItem.findViewById(R.id.profileImg); 

     tvusername.setText(chatsList.get(position).getUsername()); 
     tvlastmessage.setText(chatsList.get(position).getLastMessage()); 
     tvlastmessagetime.setText(chatsList.get(position).getLastMessageTime()); 
     tvuid.setText(chatsList.get(position).getUseruid()); 
     Picasso.with(getContext()).load(chatsList.get(position).getPhotoURL()).placeholder(R.drawable.ic_person_grey_round).into(ivphoto); 

     listViewItem.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(context, Chat_Room.class); 
       i.putExtra("room_name", chatsList.get(position).getUsername()); 
       i.putExtra("room_uid", chatsList.get(position).getUseruid()); 
       context.startActivity(i); 

      } 
     }); 

     listViewItem.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       final Dialog dialog = new Dialog(context); 
       dialog.setContentView(R.layout.abcd_listview_alertdia_layout); 
       ArrayList<String> list_of_chats = new ArrayList<>(); 
       final ArrayAdapter<String> arrayAdapter; 
       arrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, list_of_chats); 

       list_of_chats.add(0, "Chatverlauf mit "+ chatsList.get(position).getUsername()+" löschen?"); 
       list_of_chats.add(1, "Profil von "+chatsList.get(position).getUsername()+" anschauen"); 
       arrayAdapter.notifyDataSetChanged(); 
       final ListView lv = (ListView) dialog.findViewById(R.id.lv); 
       lv.setAdapter(arrayAdapter); 
       lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, final int position2, long id) { 
         if (position2 == 0) { 
          dialog.dismiss(); 
          AlertDialog.Builder alert = new AlertDialog.Builder(context); 
          alert.setTitle("Chatverlauf mit "+chatsList.get(position).getUsername()+" löschen?") 
            .setMessage("Du kannst das Löschen nicht rückgängig machen. Bist du dir sicher?") 
            .setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() { 
             @Override 
             public void onClick(DialogInterface dialog, int which) { 
              dialog.cancel(); 
             } 
            }) 
            .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
             @Override 
             public void onClick(DialogInterface dialog, int which) { 
              FirebaseDatabase.getInstance().getReference().child("chats").child("userchats").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child(chatsList.get(position).getUseruid()).setValue(null); 
              FirebaseDatabase.getInstance().getReference().child("chats").child("users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("messages").child(chatsList.get(position).getUseruid()).setValue(null); 
             } 
            }).setCancelable(true) 
            .show(); 
          lv.setAdapter(arrayAdapter); 
          arrayAdapter.notifyDataSetChanged(); 
         } 
         if (position2 == 1) { 
          Intent intent = new Intent(context, ViewContact.class); 
          intent.putExtra("useruid", chatsList.get(position).getUseruid()); 
          context.startActivity(intent); 
         } 
        } 
       }); 
       dialog.show(); 
       return true; 
      } 
     }); 

     ivphoto.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final Dialog dialog = new Dialog(context); 
       dialog.setContentView(R.layout.abcd_profile_pic_dialog_layout); 
       ImageView imageView = (ImageView) dialog.findViewById(R.id.alertImage); 
       TextView textView = (TextView)dialog.findViewById(R.id.alertdialogtv); 
       ImageView message = (ImageView)dialog.findViewById(R.id.alertMessage); 
       ImageView profile = (ImageView)dialog.findViewById(R.id.alertProfile); 
       profile.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Intent intent = new Intent(context, ViewContact.class); 
         intent.putExtra("useruid", chatsList.get(position).getUseruid()); 
         context.startActivity(intent); 
         dialog.dismiss(); 
        } 
       }); 
       message.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Intent intent = new Intent(getContext(), Chat_Room.class); 
         intent.putExtra("room_name", chatsList.get(position).getUsername()); 
         intent.putExtra("room_uid", chatsList.get(position).getUseruid()); 
         context.startActivity(intent); 
        } 
       }); 
       Picasso.with(getContext()).load(chatsList.get(position).getPhotoURL()).placeholder(R.drawable.ic_person_grey_round).into(imageView); 
       textView.setText(chatsList.get(position).getUsername()); 
       dialog.setCancelable(true); 
       dialog.show(); 
      } 
     }); 

     return listViewItem; 
    } 
    ... 
} 

そして、これは私がリストのデータを取得する方法である:

FirebaseDatabase.getInstance().getReference().child("chats").child("userchats").child(myUiD).addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     List<chatapp.chatapp2.Chats.Chats> chatsList = new ArrayList<chatapp.chatapp2.Chats.Chats>(); 

     for(DataSnapshot snapshot : dataSnapshot.getChildren()){ 

      chatapp.chatapp2.Chats.Chats chats = new chatapp.chatapp2.Chats.Chats(); 

      chats.setUsername(snapshot.child("roomname").getValue().toString()); 
      chats.setPhotoURL(snapshot.child("photoURL").getValue().toString()); 
      chats.setLastMessage(snapshot.child("lastMessage").getValue().toString()); 
      chats.setLastMessageTime(snapshot.child("lastMessageTime").getValue().toString()); 
      chats.setUseruid(snapshot.child("userUiD").getValue().toString()); 
      chatsList.add(chats); 
      Log.d("CHATS", chats.getUsername()); 
      Log.d("CHATS", chats.getUseruid()); 
     } 
     ChatAdapter chatAdapter = new ChatAdapter(getActivity(), chatsList); 
     chatAdapter.notifyDataSetChanged(); 
     listView.setAdapter(chatAdapter); 
     listView.setVisibility(View.VISIBLE); 
    } 
    ... 
}); 
+0

'ArrayAdapter'の中で' listview'を作成するのはなぜですか? –

+0

明らかに、クラスに質問するためのリストを渡さなかったためArrayAdapterを使用しないでください(他の多くの人が間違って使用しています)。しかし、BaseAdapterを使用してください。また、アダプタを使用する前にnotifyDataSetChangedを呼び出すことは意味がありません。 – Selvin

+0

ArrayAdapterにリストビューではないビューを作成します。 –

答えて

0

私はそれが働いていない理由を本当に知らないが、私は解決策が見つかりました:

このようにgetCountメソッドをオーバーライドする必要があります。

@Override 
public int getCount() { 
    return chatsList == null ? 0 : chatsList.size(); 
} 

私はそれが何をしているのかわかりません:) :)

関連する問題