Zaznaczanie zapisanej pozycji do adapteru listy

0

Witam,
Otóż ma pewien problem. Mam listę kart. Podaną kartę zaznaczam. Karta zaznacza mi na odpowiedni kolor. Zapisuje numer zaznaczonej pozycji do SharedPreferences. Następnie przez konstruktor odczytuje zaznaczoną pozycję. Problem mam taki, że za bardzo nie wiem jak zaznaczyć podaną pozycję karty.

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.CardViewHolder> {

    private int lastCheckedPos = 0;
    private int position;
    private Context mContext;
    private List<Card> cardsList = new ArrayList<>();
    private MySharepreference mySharepreference;
    private ItemClickListener clickListener;


    public void setClickListener(ItemClickListener clickListener) {
        this.clickListener = clickListener;
    }

    public CardAdapter(Context mContext, ArrayList<Card> cardsList, String key, int position) {
        this.key = key;
        this.mContext = mContext;
        this.cardsList = cardsList;
        this.position = position;
        notifyDataSetChanged();
    }

    @Override
    public CardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_card, parent, false);
        return new CardViewHolder(view);
    }


    @Override
    public void onBindViewHolder(CardViewHolder holder, final int position) {

        final Card card = cardsList.get(position);
        databaseHandler = new CardDatabaseHandler(mContext);
        mySharepreference = new MySharepreference();
        try {
            nameDecrypt = AesCrypt.decrypt(key, card.getNameCard());
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        }
        try {
            setDateDecrypt = AesCrypt.decrypt(key, card.getCreateDate());
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        }

        try {
            expirationDateDecrypt = AesCrypt.decrypt(key, card.getExpirationDate());
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        }

        dataString = generateData(expirationDateDecrypt);
        holder.nameCard.setText(nameDecrypt);
        holder.setCurrentDateText.setText(setDateDecrypt);
        holder.setExpirationDateText.setText(dataString);


        if (lastCheckedPos == position) {
            mySharepreference.saveNumberCard(mContext, card.getId());
            mySharepreference.savePosition(mContext, position);

            holder.cardView.setBackgroundResource(R.drawable.bordercardview);
            holder.menu.setOnClickListener(new View.OnClickListener() {

                Typeface custom_fonts = Typeface.createFromAsset(mContext.getAssets(), "fonts/OpenSans-Regular.ttf");
                Typeface custom_fonts_Bold = Typeface.createFromAsset(mContext.getAssets(), "fonts/OpenSans-Bold.ttf");

                @Override
                public void onClick(View v) {
                    PopupMenu popupMenu = new PopupMenu(mContext, v);
                    popupMenu.inflate(R.menu.cardmenudefault);
                    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                        @Override
                        public boolean onMenuItemClick(MenuItem item) {
                            switch (item.getItemId()) {
                                case R.id.editCardD:

                                    break;
                                case R.id.deleteCardD:

                                    break;
                                case R.id.informationD:

                                    break;
                            }
                            return false;
                        }
                    });
                    popupMenu.show();
                }
            });
        } else {
            holder.cardView.setBackgroundResource(R.drawable.bordercardviewwhite);
            holder.menu.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    PopupMenu popupMenu = new PopupMenu(mContext, v);
                    popupMenu.inflate(R.menu.cardmenu);
                    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                        @Override
                        public boolean onMenuItemClick(MenuItem item) {
                            switch (item.getItemId()) {
                                case R.id.editCard:

                                    break;
                                case R.id.deleteCard:

                                    break;
                                case R.id.informationAboutCard:

                            }
                            return false;
                        }
                    });
                    popupMenu.show();
                }
            });
        }
    }

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

    public class CardViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        Typeface custom_fonts = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/OpenSans-Regular.ttf");
        Typeface custom_fonts_bold = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/OpenSans-Bold.ttf");

        private ImageView menu;
        private LinearLayout cardView;
        private TextView nameCard, setDateText, expirationDateText, setCurrentDateText, setExpirationDateText;

        public CardViewHolder(View itemView) {
            super(itemView);
            nameCard = (TextView) itemView.findViewById(R.id.nameCard);
            nameCard.setTypeface(custom_fonts_bold);
            setDateText = (TextView) itemView.findViewById(R.id.dateText);
            setDateText.setTypeface(custom_fonts);
            expirationDateText = (TextView) itemView.findViewById(R.id.dateExpiration);
            expirationDateText.setTypeface(custom_fonts);
            setCurrentDateText = (TextView) itemView.findViewById(R.id.setCurrentDateText);
            setCurrentDateText.setTypeface(custom_fonts);
            setExpirationDateText = (TextView) itemView.findViewById(R.id.setDateExpirationText);
            setExpirationDateText.setTypeface(custom_fonts);
            menu = (ImageView) itemView.findViewById(R.id.menu);
            cardView = (LinearLayout) itemView.findViewById(R.id.cardView);
            cardView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            clickListener.onClick(v, getAdapterPosition());
        }
    }

    private static String generateData(String expirationDate) {
        String month, year, newDate;
        month = expirationDate.substring(0, 2);
        year = expirationDate.substring(3, 5);
        newDate = month + "/" + "20" + year;
        return newDate;
    }
    
}
0

po 1.
uzywaj ButterKnife

po 2.
z onBindViewHolder() metody

    databaseHandler = new CardDatabaseHandler(mContext);
    mySharepreference = new MySharepreference();

przenies do konstruktora CardAdapter, bo za kazdym razem tworzysz nowe instancje.

po 3.
mozesz stwrozyc 2 viewHoldery Selected i Unselected i ta logike w if z bind przenisc do holderow
do tego uzywasz int viewType z onCreateViewHolder

zobacz watek:
https://stackoverflow.com/questions/26245139/how-to-create-recyclerview-with-multiple-view-type

i zaznaczaj tylko na podstawie CardId a nie na podstawie adapterPosition

1 użytkowników online, w tym zalogowanych: 0, gości: 1