CustomAdapter不会在Listview中显示任何项目

时间:2017-06-25 15:04:58

标签: android listview android-arrayadapter

我想使用自定义适配器在ListView中显示来自Firebase列表的用户聊天。但不知怎的,它不起作用。当我尝试查看logcat中的数据时,我收到了响应,但是当我将列表传递给CustomAdapter时,它在ListView中不显示任何内容。有什么问题?

我的适配器:

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;
    }
    ...
}

这就是我获取List的数据的方式:

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);
    }
    ...
});

1 个答案:

答案 0 :(得分:0)

我真的不知道它为什么不起作用,但我找到了解决方案:

您必须覆盖getCount方法,如下所示:

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

我不知道它做了什么,但它有效:) :)