0

Je fais une simple application de devis qui contient des guillemets dans cardView. J'ai stocké les guillemets dans les valeurs> tableaux. Il y a deux fragments dans mon application qui contient les guillemets dans cardview et le prochain est favoris. J'ai créé un bouton J'aime dans CardView de telle sorte que lorsque le bouton J'aime est pressé, je veux que cette vue apparaisse dans le fragment des favoris. Puis-je le faire en utilisant des préférences partagées? Si oui, comment?Comment j'implémente le bouton J'aime en utilisant les préférences partagées

Le recylerAdapter pour mon Vignettes est donnée ci-dessous:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { 
     private ClipboardManager myClipboard; 
     private ClipData myClip; 
     private Context context; 





     public List<CardItemModel> cardItems; 

     public RecyclerAdapter(List<CardItemModel> cardItems){ 
      this.cardItems = cardItems; 
     } 

     public static class ViewHolder extends RecyclerView.ViewHolder{ 
      ImageView copyButton; 
      ImageView shareButton; 
      ToggleButton favButton; 



      TextView title; 
      TextView content; 
      public ViewHolder(View itemView) { 
       super(itemView); 
       this.title = (TextView)itemView.findViewById(R.id.card_title); 
       this.content = (TextView)itemView.findViewById(R.id.card_content); 
       this.copyButton= (ImageView) itemView.findViewById(R.id.copyButton); 
       this.shareButton=(ImageView) itemView.findViewById(R.id.shareButton); 

       this.favButton=(ToggleButton) itemView.findViewById(R.id.favButton); 

       favButton.setChecked(false); 
       favButton.setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(), R.mipmap.ic_launcher)); 


      } 
     } 



     @Override 
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item,parent,false); 
      ViewHolder viewHolder = new ViewHolder(view); 

      return viewHolder; 
     } 

     @Override 
     public void onBindViewHolder(final ViewHolder holder, int position) { 
      holder.title.setText(cardItems.get(position).title); 
      holder.content.setText(cardItems.get(position).content); 
      holder.copyButton.setOnClickListener(new View.OnClickListener(){ 
       public void onClick(View v){ 


        myClipboard = (ClipboardManager) v.getContext().getSystemService(Context.CLIPBOARD_SERVICE); 


        myClip = ClipData.newPlainText("label", holder.content.getText().toString()); 
        myClipboard.setPrimaryClip(myClip); 
        Toast.makeText(v.getContext(), "Copied to clipboard" , Toast.LENGTH_SHORT).show(); 

       } 
      }); 
      holder.shareButton.setOnClickListener(new View.OnClickListener(){ 
       public void onClick(View v){ 
        Intent share = new Intent(Intent.ACTION_SEND); 
        share.setType("text/plain"); 
        share.putExtra(Intent.EXTRA_TEXT, holder.content.getText().toString()); 
        v.getContext().startActivity(Intent.createChooser(share, "Share Text")); 
       } 
      }); 

      holder.favButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){ 
       @Override 
       public void onCheckedChanged(CompoundButton favButton, boolean isChecked){ 
        if (isChecked) 
         favButton.setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(),R.mipmap.ic_launcher)); 

        else 
         favButton.setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(), R.mipmap.ic_cart)); 
       } 
      }); 
     } 

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

Et voici mon fragment qui contient des citations:

public class Category1 extends Fragment { 

    private List<CardItemModel> cardItems = new ArrayList<>(20); 



    private MainActivity mainActivity; 
    private Toolbar toolbar; 
    private RecyclerView recyclerView; 
    private RecyclerAdapter recyclerAdapter; 

    public static ArrayList<CardItemModel> data; 


    public Category1() { 

    } 
    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     mainActivity = (MainActivity)activity; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.cat1_fragment, container, false); 

     toolbar = (Toolbar)view.findViewById(R.id.fab_toolbar); 

     setupToolbar(); 



     recyclerView = (RecyclerView)view.findViewById(R.id.fab_recycler_view); 

     setupRecyclerView(); 

     return view; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 





     super.onActivityCreated(savedInstanceState); 
     mainActivity.setupNavigationDrawer(toolbar); 
    } 

    private void setupToolbar(){ 
     toolbar.setTitle(getString(R.string.cat1_fragment_title)); 
     mainActivity.setSupportActionBar(toolbar); 
    } 

    private void setupRecyclerView(){ 
     recyclerView.setLayoutManager(new LinearLayoutManager(mainActivity)); 
     recyclerView.setHasFixedSize(true); 
     initializeCardItemList(); 
     recyclerAdapter = new RecyclerAdapter(cardItems); 
     recyclerView.setAdapter(recyclerAdapter); 
    } 

    private void initializeCardItemList(){ 
     CardItemModel cardItemModel; 
     String[] cardTitles = getResources().getStringArray(R.array.cat1_cards); 
     String[] cardContents = getResources().getStringArray(R.array.cat1_cards_content); 
     final int length = cardTitles.length; 
     for(int i=0;i<length;i++){ 
      cardItemModel = new CardItemModel(cardTitles[i],cardContents[i]); 
      cardItems.add(cardItemModel); 
     } 
    } 



} 

Comment puis-je configurer mon Fragment favori pour que je puisse obtenir le éléments favorisés en elle. Et ceci est ma classe de modèle.

public class CardItemModel { 

    public String title; 
    public String content; 

    public CardItemModel(String title, String content) { 
     this.title = title; 
     this.content = content; 
    } 
} 

Répondre

1
  1. Ne pas utiliser static viewHolder.
  2. N'utilisez pas onClickListener dans BindViewHolder. Utilisez-le dans ViewHolder. Apparemment, il utilise l'instance de viewHolder.
  3. N'utilisez pas deux tableaux séparés pour les guillemets (String) et les favoris (booléen). Utilisez la classe de modèle pour des opérations comme celle-là.

Si vous avez des questions, DM à moi. Bonne chance.

+0

J'ai créé la classe de modèle –

+0

J'ai modifié la classe de modèle d'ajout de question. –

+0

Découvrez, https://stackoverflow.com/a/44152163/5255006, vous pouvez utiliser l'interface pour obtenir les éléments favorisés dans votre fragment/activité –