2017-09-25 5 views
0

私はリストカードを持っています。すべてのカードには、edit、deleteCard、information、およびdefaultCardというオプションがあります。最初のカードを追加すると、このカードは自動的に国境の緑にカードをセットします。私たちはより多くのカードを持っているとき私たちはcard.Butを選択することができます例えば私は2番目のカードを選択し、次に私のアプリを終了するときに問題があります。私は私のアプリをtrunし、私のリストカードを選択すると、最初のカードが選択されたが、私はセカンドカードを選択します。選択したカードの位置を保存する方法と、次に選択したカードを読み取る方法。RecycleViewで選択したカードの位置を保存してお読みください

List Card

この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(); 
    } 
} 

答えて

-1

ストアonSaveInstanceState()コールバックメソッドを使用して、選択したカードの位置。

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

そしてonCreate()で今、あなたはあなたのrecyclerviewにこのインデックスを割り当てることができ、コード

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

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

の下に追加します。

this linkを参照してください。

+0

このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](レビュー/低品質の投稿/ 17439008) –

+0

私の答えに必要なコードを追加しました – user320676

関連する問題