Recycerview отображать конкретные данные - PullRequest
0 голосов
/ 05 июля 2019

У меня есть 2 типа пользователей.Первый пользователь может видеть все данные в представлении переработчика.второй пользователь может видеть только определенные данные в окне рециркуляции.

В настоящее время я могу отображать только определенные данные, только после того, как второй пользователь нажмет, он отобразит первые данные, а не в соответствии с позицией.

Как исправить клики пользователя на правом дисплее и перейти к нужным данным?

MainActivity.java.Подготовка к отображению представления рециркулятора в соответствии с условием.

private void prepareMainMenu(final String type) {
        MainItem mainItem;
        switch (type) {
            case "Customer":
                mainItem = new MainItem("Customer", imageViewMain[1]);
                mainItemList.add(mainItem);
                break;
            case "Packages":
                mainItem = new MainItem("Packages", imageViewMain[2]);
                mainItemList.add(mainItem);
                break;
            case "Live Chat":
                mainItem = new MainItem("Live Chat", imageViewMain[3]);
                mainItemList.add(mainItem);

                break;
            case "Transaction":
                mainItem = new MainItem("Transaction", imageViewMain[5]);
                mainItemList.add(mainItem);

                break;
            case "Profit Report":
                mainItem = new MainItem("Profit Report", imageViewMain[4]);
                mainItemList.add(mainItem);

                break;
            case "Owner":
                mainItem = new MainItem("Admin", imageViewMain[0]);
                mainItemList.add(mainItem);

                mainItem = new MainItem("Customer", imageViewMain[1]);
                mainItemList.add(mainItem);

                mainItem = new MainItem("Packages", imageViewMain[2]);
                mainItemList.add(mainItem);

                mainItem = new MainItem("Live Chat", imageViewMain[3]);
                mainItemList.add(mainItem);

                mainItem = new MainItem("Profit Report", imageViewMain[4]);
                mainItemList.add(mainItem);

                mainItem = new MainItem("Transaction", imageViewMain[5]);
                mainItemList.add(mainItem);
                break;

        }
        //Display
        mainViewAdapter.notifyDataSetChanged();
    }

MainViewAdapter.java (где пользователь будет щелкать)

 @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
        MainItem mainItem = mainItemList.get(position);
        holder.getTextViewTitle().setText(mainItem.getNameMain());

        Glide.with(context)
                .load(mainItem.getImageMain())
                .into(holder.imageViewMain);

        holder.getView().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Check the position
                switch (position) {
                    case 0:
                        context.startActivity(new Intent(context, AdminActivity.class));
                        break;
                    case 1:
                        context.startActivity(new Intent(context, CustomerActivity.class));
                        break;
                    case 2:
                        context.startActivity(new Intent(context, PackagesSelectorActivity.class));
                        break;
                    case 3:
                        context.startActivity(new Intent(context, LiveChatActivity.class));
                        break;
                    case 4:
                        context.startActivity(new Intent(context, ProfitReportActivity.class));
                        break;
                    case 5:
                        context.startActivity(new Intent(context, TransactionActivity.class));
                        break;
                }

            }
        });
    }

ОБНОВЛЕНО: Это место, где идет метод prepareMainMenu.

 private void retrieveData() {
        if (firebaseUser != null) {
            databaseReference.child("admin").child(firebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()) {
                        Admin admin = dataSnapshot.getValue(Admin.class);
                        if (admin != null) {
                            fullName = admin.getFullName();
                            email = admin.getEmail();
                            type = admin.getType();

                            //Then display
                            textViewFullName.setText(fullName);
                            textViewEmail.setText(email);
                            textViewType.setText(type);
                            //Check the type of admin
                            switch (type) {
                                case "Customer":
                                    prepareMainMenu("Customer");
                                    break;
                                case "Packages":
                                    prepareMainMenu("Packages");
                                    break;
                                case "Live Chat":
                                    prepareMainMenu("Live Chat");
                                    break;
                                case "Transaction":
                                    prepareMainMenu("Transaction");
                                    break;
                                case "Profit Report":
                                    prepareMainMenu("Profit Report");
                                    break;
                                case "Owner":
                                    prepareMainMenu("Owner");
                                    break;
                            }
                        }
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
        }
    }

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Вместо использования позиции внутри onBindViewHolder используйте имя mainItem для разграничения события щелчка.

holder.getView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
    switch (mainItem.getNameMain().toLowerCase()) {
        case "admin":
            context.startActivity(new Intent(context, AdminActivity.class));
            break;
        case "customer":
            context.startActivity(new Intent(context, CustomerActivity.class));
            break;
        case "packages":
            context.startActivity(new Intent(context, PackagesSelectorActivity.class));
            break;
        case "live chat":
            context.startActivity(new Intent(context, LiveChatActivity.class));
            break;
        case "profit report":
            context.startActivity(new Intent(context, ProfitReportActivity.class));
            break;
        case "transaction":
            context.startActivity(new Intent(context, TransactionActivity.class));
            break;
    }

}
});

Кроме того, я использовал сравнение строк в нижнем регистре, что уменьшит риск совпадения строк.

0 голосов
/ 07 июля 2019

Если вы посмотрите на этот переработчик с какой-либо точки зрения роли пользователя, вы обнаружите, что данные фильтруются в соответствии с текущей зарегистрированной ролью.так что вы легко добавляете роль пользователя в класс MainItem как свойство для любого объекта, созданного из этого класса.и в функции prepareMainMenu вы можете легко фильтровать данные в соответствии с текущей зарегистрированной ролью

; сначала вы можете определить Enum для разных ролей

public enum Roles {
    CustomerRole, AdminRole
}

, а затем передать эту роль как свойствоклассу MainItem, подобному этому

MainItem("Customer", imageViewMain[1],Roles.Customer);

И метод onBindView будет выглядеть следующим образом

  @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
        MainItem mainItem = mainItemList.get(position);
        holder.getTextViewTitle().setText(mainItem.getNameMain());

        Glide.with(context)
                .load(mainItem.getImageMain())
                .into(holder.imageViewMain);

        holder.getView().setOnClickListener(new  View.OnClickListener(){
            @Override
            public void onClick(View view) {

              switch (mainItem.role) {
                 case Roles.CustomerRole: 
                      context.startActivity(new Intent(context, CustomerActivity.class));
                      break;

                 case Roles.Admin: 
                      context.startActivity(new Intent(context, AdminActivity.class));
                      break;
            }
        });
    }

, и другое решение, которое выглядит намного лучше, - передать имя классаваш dto такой

class MainItem {
    String title;
    String image;
    Class className;

    public MainItem(String title, String image, Class className) {
        this.title = title;
        this.image = image;
        this.className = className;
    }

    public String getTitle() {
        return title;
    }

    public String getImage() {
        return image;
    }

    public Class getClassName() {
        return className;
    }
}

, и ваши данные будут созданы

MainItem("Customer", imageViewMain[1],CustomerActivity.class);

, а ваш метод onBindView будет таким

        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
            MainItem mainItem = mainItemList.get(position);
            holder.getTextViewTitle().setText(mainItem.getNameMain());

            Glide.with(context)
                    .load(mainItem.getImageMain())
                    .into(holder.imageViewMain);

            holder.getView().setOnClickListener(new  View.OnClickListener(){
                @Override
                public void onClick(View view) {
                   context.startActivity(new Intent(context, mainItem.getClassName));

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