1

Es fällt mir schwer zu verstehen, wie man einen Wert von einem Fragment an ein anderes Fragment übergibt. Ich habe einen Umschaltknopf in Recycler-Artikel erstellt, der bei Überprüfung den Inhalt der Karte an ein anderes Fragment (Favoriten) weitergibt, das recyclingVIEW implementiert.Wie Werte vom Recycler übergeben werden Element eines Fragments zu einem anderen Fragment anzeigen

das ist mein recyclerView Adapter

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

und das ist mein 'Favorite' Fragment, wo ich den Wert auf passs wollen.

public class FavouriteFragment extends Fragment { 

    private List<CardItemModel> cardItems = new ArrayList<>(20); 
    private MainActivity mainActivity; 
    private Toolbar toolbar; 
    private RecyclerView recyclerView; 
    private RecyclerAdapter recyclerAdapter; 

    public FavouriteFragment() { 

    } 

    @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.fragment_favourite, 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.fav_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.fav_cards); 
     String[] cardContents = getResources().getStringArray(R.array.fav_cards_content); 
     final int length = cardTitles.length; 
     for(int i=0;i<length;i++){ 
      cardItemModel = new CardItemModel(cardTitles[i],cardContents[i]); 
      cardItems.add(cardItemModel); 
     } 
    } 



} 

Antwort

0

Die Kommunikation zwischen Fragmenten kann durch EventBus erfolgen. Schritte: 1. Erstellen Sie die Ereignisklasse 2. Registrieren Sie das Ereignis, an dem Sie die Daten des Fragments ändern möchten. 3. Post Event von Fragment (onClick auf Umschaltfläche).

https://github.com/greenrobot/EventBus

http://greenrobot.org/eventbus/

Schritt 1:

import java.io.Serializable; 

public class ToggleButtonClickEvent implements Serializable { 
private CardItemModel cardItemModel; 

public ToggleButtonClickEvent (CardItemModel ardItemModel){ 
    this.cardItemModel= cardItemModel; 
} 

public CardItemModel getCardItemModel() { 
    return cardItemModel; 
} 

}

Schritt 2: Register und Ereignis in Fragment deregistrieren, wo Sie Daten wollen

sich ändern

}

@Override 
    public void onStop() { 
    super.onStop(); 
    EventBus.getDefault().unregister(this); 
    } 

Schritt 3:

Post-Ereignis, wenn Umschaltknopf

EventBus.getDefault().post(new ToggleButtonClickEvent(cardItemModel)); 
0

Ihre Werte im Bundle

Fragment fragment = new Table_Selection_QRCODE(); 
          Bundle bun = new Bundle(); 
          bun.putString("table","20"); 
          fragment.setArguments(bun); 
getFragmentManager().beginTransaction().replace(R.id.frag, fragment).commit(); 

In anderem Fragmente des Hinzufügen geklickt Receive Werte wie folgt (OnCreate)

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Bundle b=getArguments(); 
     if(b!=null){ 
      rslt=b.getString("table",""); 
     } 
    } 
1

Sie können Schnittstelle dafür verwenden. Nehmen wir ein Beispiel sehen, wo Sie passieren Wert von fragmenta wollen

class FragmentA extends Fragment{ 
    //Your fragment a functionalities goes here 
    //now define an interface inside this FragmentA 

    //you get reference from main activity 
    MainActivity activity; 
    @Override 
    void onCreate(){ 
    activity = getActivity(); 
    } 
//after your functionalities you can call passValue function of main activity from the variable 'activity' like 
    activity.passValue(your integer value from fragmentA to main activity) 

    interface OnValuePassedListener{ 
     void passValue(int value)//if you want to pass integer value 
     } 
    } 


    //this is the activity where FragmentA is located 

    public class MainActivity extends Activity implements FragmentA.OnValuePassedListener{ 
//Inside this activity, you write code to open the fragment. When you do that pass this activity's reference to the FragmentA 


    @Override 
    void passValue(int value){ 
    //you get the value from FragmentA inside this function 
     } 

    } 

Sie zu wissen, wie FragmentB Wert Fragment von Aktivität zu übergeben. Mit der Funktion passValue() innerhalb der Aktivität können Sie ein anderes Fragment aufrufen und den Wert an das Fragment übergeben.

Auf diese Weise können Sie den Wert von FragmentA an ein anderes Fragment übergeben, indem Sie Aktivität als Zwischenhändler verwenden. Sie können mehr von hier von https://www.youtube.com/watch?v=VyyGP_d0Ia8&index=118&list=PLonJJ3BVjZW6hYgvtkaWvwAVvOFB7fkLa

erfahren
Verwandte Themen