2017-09-25 2 views
0

Ich habe eine Liste. Jede Karte hat eine Option: edit, deleteCard, information und defaultCard. Wenn die erste Karte hinzugefügt wird, setzt diese Karte die Karte automatisch auf das grüne Feld. Wenn wir mehr Karten haben, können wir die Karte auswählen. Aber ich habe Probleme, wenn ich zum Beispiel die zweite Karte auswähle und als nächstes meine App verlasse. Wenn ich meine App trun und meine Liste gehe, wird die erste Karte ausgewählt, aber ich wähle die zweite Karte aus. Wie man die gewählte Position speichert und als nächstes die ausgewählte Positionskarte liest.Speichern und lesen Sie ausgewählte Kartenposition in RecycleView

List Card

diese CardAdapter.class

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

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

    public CardAdapter(Context mContext, ArrayList<Card> cardsList) { 
     this.mContext = mContext; 
     this.cardsList = cardsList; 
     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(); 

     holder.nameCard.setText(card.getNumberCard()); 
     holder.setCurrentDateText.setText(card.getCreateDate()); 
     holder.setExpirationDateText.setText(card.getExpirationDate()); 

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

      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: 

            break; 
           case R.id.defaultCard: 

            lastCheckedPos = position; 
            notifyDataSetChanged(); 

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

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

Antwort

-1

Speichern Sie die Position Ihrer ausgewählten Karte onSaveInstanceState() Callback-Methode verwenden.

@Override 
public void onSaveInstanceState(Bundle bundle) { 
    super.onSaveInstanceState(bundle); 
    bundle.putInt("CARD_POSITION", 12);    
} 

Und in onCreate() unten Code hinzufügen

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.your_layout); 

    if (savedInstanceState != null) { 
     index = savedInstanceState.getString("CARD_POSITION");    
    } 
} 

Jetzt können Sie diesen Index zu Ihrem recyclerview zuweisen.

Als Referenz siehe this link.

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/17439008) –

+0

Der erforderliche Code in meiner Antwort hinzugefügt – user320676

Verwandte Themen