Android Studio: добавление пользователя в группу, как WhatsApp - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь добавить пользователей в такую ​​группу, как WhatsApp, но не могу понять, как это сделать, и пока не нашел решения.

Когда мы добавляем пользователей в WhatsApp, добавленные пользователи отображаются горизонтально в верхней части, а пользователь в списке контактов отмечается зеленым кружком.

В моем случае я использовал два RecyclerViews: один для добавленных пользователей, а другой для списка контактов.

Моя первая проблема: добавленные пользователи отображаются по одному на страницу. Как разместить их рядом?

Моя вторая проблема: я не могу понять, как изменить CircleImageView с зеленого на ноль и наоборот. Я думаю, что это связано со связью между двумя адаптерами.

Вот что у меня есть до сих пор:

enter image description here

Вот как я вызываю RecyclerViews в Activity.java, где mUserList соответствует списку контактов, а mUserListAdded соответствует добавленным пользователям (горизонтальное представление recycler).

    mToolBar = findViewById(R.id.find_user_bar_layout);
    setSupportActionBar(mToolBar);
    getSupportActionBar().setTitle("Novo Contato");
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);

    mUpdateGroupBtn = findViewById(R.id.new_user_finalize_button);

    mUserList= findViewById(R.id.userList);
    mUserList.setNestedScrollingEnabled(false);
    mUserList.setHasFixedSize(false);
    mUserListLayoutManager = new LinearLayoutManager(getApplicationContext(),LinearLayout.VERTICAL,false);
    mUserList.setLayoutManager(mUserListLayoutManager);
    mUserListAdapter = new UserListAdapter(userList, this);
    mUserList.setAdapter(mUserListAdapter);

    mUserListAdded = findViewById(R.id.user_from_contactlist);
    mUserListAdded.setNestedScrollingEnabled(false);
    mUserListAdded.setHasFixedSize(true);
    mUserListAddedLayoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.HORIZONTAL,false);
    mUserListAdded.setLayoutManager(mUserListAddedLayoutManager);
    mUserListAddedAdapter = new UserListAddedAdapter(userListAdded, this);
    mUserListAdded.setAdapter(mUserListAddedAdapter);

Вот адаптер для mUserList:

public class UserListAdapter extends RecyclerView.Adapter<UserListAdapter.UserListViewHolder> implements Filterable {

    private UserListToUserListAddedAdapter userListToUserListAddedAdapter;

    ArrayList<UserObject> userList, userListFull;
    private HashMap<Integer,Boolean> selectedItem = new HashMap<>();

    public UserListAdapter(ArrayList<UserObject> userList, UserListToUserListAddedAdapter listener){
        this.userList = userList;
        this.userListFull = new ArrayList<>(userList);
        this.userListToUserListAddedAdapter = listener;
    }

    @NonNull
    @Override
    public UserListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user,null,false);
        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutView.setLayoutParams(lp);

        UserListViewHolder rcv = new UserListViewHolder(layoutView);
        return rcv;
    }

    @Override
    public void onBindViewHolder(@NonNull final UserListViewHolder holder, final int position) {
        holder.mName.setText(userList.get(position).getName());
        holder.mPhone.setText(userList.get(position).getPhone());

        holder.mLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (selectedItem.get(position) == null || selectedItem.get(position) == false) {
                    selectedItem.put(position, true);
                    holder.mIcon.setVisibility(View.VISIBLE);
                    holder.mIcon.setImageResource(R.drawable.online);

                    if (userListToUserListAddedAdapter != null) {
                        Log.i("debinf userListAdp", "userListToUserListAddedAdapter != null");
                        userListToUserListAddedAdapter.getUserAdded(userList.get(position), true);
                    }

                } else {
                    selectedItem.put(position, false);
                    holder.mIcon.setVisibility(View.INVISIBLE);

                    if (userListToUserListAddedAdapter != null) {
                        Log.i("debinf userListAdp", "userListToUserListAddedAdapter != null");
                        userListToUserListAddedAdapter.getUserAdded(userList.get(position), false);
                    }
                }
                /*String key = FirebaseDatabase.getInstance().getReference().child("group").push().getKey();

                FirebaseDatabase.getInstance().getReference().child("user").child(FirebaseAuth.getInstance().getUid()).child("group").child(key).setValue(true);
                FirebaseDatabase.getInstance().getReference().child("user").child(userList.get(position).getUid()).child("group").child(key).setValue(true);*/

                if (FirebaseAuth.getInstance().getUid().equals(userList.get(position).getUid())) {
                    Toast.makeText(v.getContext(), "Voce eh o(a) criador(a) do Grupo e ja foi adicionado(a)", Toast.LENGTH_SHORT).show();
                } else {
                    //FirebaseDatabase.getInstance().getReference().child("ContactAdded").child(FirebaseAuth.getInstance().getUid()).child(userList.get(position).getUid()).setValue("");

                    Map<String, String> NamePhoneMap = new HashMap<>();
                    NamePhoneMap.put("name",userList.get(position).getName());
                    NamePhoneMap.put("phone",userList.get(position).getPhone());

                    Toast.makeText(v.getContext(), "Voce adiciou : " + NamePhoneMap, Toast.LENGTH_SHORT).show();
                }

                //DatabaseReference contactAdded = FirebaseDatabase.getInstance().getReference().child("ContactAdded").child(FirebaseAuth.getInstance().getUid()).child(userList.get(position).getUid());
                //Task<Void> voidTask = contactAdded.updateChildren(NamePhoneMap);

                //ItemClicked.add();
                //Log.i("debinf userlistadapter", "");

            }
        });
    }

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

    public void addBackingListUser(UserObject user) {
        userListFull.add(user);
    }

    @Override
    public Filter getFilter() {
        return teamFilter;
    }

    private Filter teamFilter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            List<UserObject> filteredList = new ArrayList<>();
            if (constraint == null || constraint.length() == 0) {
                filteredList.addAll(userListFull);
            } else {
                String filterParttern = constraint.toString().toLowerCase().trim();

                for (UserObject user : userListFull) {
                    if (user.getName().toLowerCase().contains(filterParttern) || user.getPhone().toLowerCase().contains(filterParttern)) {
                        filteredList.add(user);
                    }
                }
            }
            FilterResults results = new FilterResults();
            results.values = filteredList;
            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            userList.clear();
            userList.addAll((List) results.values);
            notifyDataSetChanged();
        }
    };

    public class UserListViewHolder extends RecyclerView.ViewHolder {

        public CircleImageView mIcon;
        public TextView mName, mPhone;
        public RelativeLayout mLayout;

        public UserListViewHolder(View view){
            super(view);

            mIcon = view.findViewById(R.id.user_profile_icon);
            mName = view.findViewById(R.id.name);
            mPhone = view.findViewById(R.id.phone);
            mLayout = view.findViewById(R.id.layoutItemUser);
        }
    }

    public void setProfileIcon(UserObject userObject) {

    }

    public interface UserListToUserListAddedAdapter {
        void getUserAdded(UserObject user, boolean isToAdd);
    }

}

Вот адаптер для mUserListAdded

public class UserListAddedAdapter extends RecyclerView.Adapter<UserListAddedAdapter.UserListAddedViewHolder> {

    private UserListAddedToUserListAdapter userListAddedToUserListAdapter;

    ArrayList<UserObject> userListAdded;

    public UserListAddedAdapter(ArrayList<UserObject> userListAdded, UserListAddedToUserListAdapter listener){
        this.userListAdded = userListAdded;
        this.userListAddedToUserListAdapter = listener;
    }

    @NonNull
    @Override
    public UserListAddedAdapter.UserListAddedViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user_added,null,false);
        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutView.setLayoutParams(lp);

        UserListAddedAdapter.UserListAddedViewHolder rcv = new UserListAddedAdapter.UserListAddedViewHolder(layoutView);
        return rcv;
    }

    @Override
    public void onBindViewHolder(@NonNull UserListAddedViewHolder holder, final int position) {
        holder.mName.setText(userListAdded.get(position).getPhone());
        //holder.mPhone.setText(userListAdded.get(position).getPhone());

        holder.mIcon.setImageResource(R.drawable.cancel_black_18dp);

        //holder.mLayout.setOnTouchListener();

        holder.mLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (userListAddedToUserListAdapter != null) {
                    Log.i("debinf userListAdp", "userListToUserListAddedAdapter != null");
                    userListAddedToUserListAdapter.getUserRemoved(userListAdded.get(position));
                }

                /*String key = FirebaseDatabase.getInstance().getReference().child("group").push().getKey();

                FirebaseDatabase.getInstance().getReference().child("user").child(FirebaseAuth.getInstance().getUid()).child("group").child(key).setValue(true);
                FirebaseDatabase.getInstance().getReference().child("user").child(userList.get(position).getUid()).child("group").child(key).setValue(true);*/

                if (FirebaseAuth.getInstance().getUid().equals(userListAdded.get(position).getUid())) {
                    //Log.i("debinf", "Owner Group was selected");
                    Toast.makeText(v.getContext(), "Voce eh o(a) criador(a) do Grupo e nao pode ser removido(a)", Toast.LENGTH_SHORT).show();

                } else {
                    FirebaseDatabase.getInstance().getReference().child("ContactAdded").child(FirebaseAuth.getInstance().getUid()).child(userListAdded.get(position).getUid()).removeValue();
                    Toast.makeText(v.getContext(), "Voce removeu : " + userListAdded.get(position).getUid(), Toast.LENGTH_SHORT).show();
                }


                //ItemClicked.add();
                //Log.i("debinf userlistadapter", "");

            }
        });

    }

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

    public class UserListAddedViewHolder extends RecyclerView.ViewHolder {
        public CircleImageView mIcon;
        public TextView mName;
        public RelativeLayout mLayout;
        public UserListAddedViewHolder(View view){
            super(view);
            mIcon = view.findViewById(R.id.user_profile_icon_added);
            mIcon.setVisibility(View.VISIBLE);
            mName = view.findViewById(R.id.name_user_added);
            mLayout = view.findViewById(R.id.layoutItemUserAdded);
        }
    }

    public interface UserListAddedToUserListAdapter {
        void getUserRemoved(UserObject user);
    }

}

Вот это xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".NewUserToGroupActivity">

    <include
        android:id="@+id/find_user_bar_layout"
        layout="@layout/app_bar_layout">

    </include>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/user_from_contactlist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_below="@+id/find_user_bar_layout">

    </android.support.v7.widget.RecyclerView>

    <LinearLayout
        android:id="@+id/users_already_added"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/user_from_contactlist"
        android:orientation="vertical">


        <View
            android:id="@+id/list_divider"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_marginBottom="4dp"
            android:background="?android:attr/listDivider" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/userList"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/list_divider">

        </android.support.v7.widget.RecyclerView>


    </LinearLayout>

    <Button
        android:id="@+id/new_user_finalize_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="0dp"
        android:text="Finalizar"
        android:textAllCaps="false" />




</RelativeLayout>

Я ценю любого, кто мог бы помочь мне решить эти две проблемы: расстояние между горизонтальными элементами (верхняя часть) и изменение CircleImageView с зеленого на добавленное значение, если не удалено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...