2016-07-21 120 views
1

我需要幫助瞭解以下場景如何工作以及如何實現結果。片段通信 - 片段片段

我有一個叫ShoppingCart的課。 它有一個叫做addItemsToShoppingCartFromPreviousOrder的方法。 現在我有一個片段叫PreviousOrderFragmentonCreateView方法是使用RecyclerView。其以前的訂單清單。 我有多個列表。現在我想知道如何從ShoppingCartaddItemsToShoppingCartFromPreviousOrder方法調用到我的片段中。 ,這樣當用戶點擊列表時,它將添加到購物車。

+2

如果你想節省您的時間,使用EventBus代替https://github.com/greenrobot/EventBus – kaitian521

+0

稱爲'addItemsToShoppingCartFromPreviousOrder'從事這項工作的方法。我必須知道如何致電或在哪裏致電該方法。例如,在我的片段'onCreateView'上,我添加了'onClickListner'不會無所事事。我不能使用第三方庫。 – Ronan

+0

[片段之間傳遞數據]的可能重複(http://stackoverflow.com/questions/38452210/pass-data-between-fragments) – TapanHP

回答

1

你需要做的是:

在你RecycleView的適配器地說:

private ItemListener mListener; 
    ... 
    public void setmListener(ItemListener mListener) { 
    this.mListener = mListener; 
    } 
    ... 
    public interface ItemListener { 
    void onItemSelected(Item item); 
    } 

項目=項目選中

他們... 在適配器的ViewHolder把那:

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

     public TextView tv_id; 
     public TextView tv_url; 
     public TextView tv_login; 

     public Holder (View itemView) { 
      super(itemView); 
      tv_id = (TextView) itemView.findViewById(R.id.tv_id); 
      tv_url = (TextView) itemView.findViewById(R.id.tv_url); 
      tv_login = (TextView) itemView.findViewById(R.id.tv_login); 

      itemView.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      if (mListener != null) { 
       Integer position = Integer.valueOf(getLayoutPosition()); 
       mListener.onUserSelected(mList.get(position)); 
      } 
     } 
    } 

OBS:這ViewHolder是一個將InnerClass適配器

他們所有你需要做的是:

在您的片段

mRecycleViewAdapter.setmListener(this) 

他們做你的片段:

public class MyFragment extends Fragment implements MyRecycleViewAdapter.ItemListener 

,並覆蓋:

@Override 
    public void onItemSelected(Item item) { 
     //call addItemsToShoppingCartFromPreviousOrder 
    } 

Here是一個例子, 看到SearchFragment.javaUsersListAdapter.java

0

1-創建一個接口調用它爲ex。 OnItemClicked

Interface OnItemClick{ 
    void onItemClicked(/*pass your selected object*/); 
} 

2-使片段實現這個接口

Class PreviousOrderFragment extends Fragment implements OnItemClicked{ 
void onItemClicked(/*pass your selected object*/){ 
     /** here you have the select object when item clicked from the activity **/ 
     addItemsToShoppingCartFromPreviousOrder(); 
} 
} 

3-採取從片段的實例在活動

Class YOUR_Activity extends Activity { 
    PreviousOrderFragment fragment = new PreviousOrderFragment(); 
    /// in the onClick event 
    public onClick(View v){ 
    fragment.onItemClicked(/**pass the selected object*/); 
    } 

} 
0

看到this answer,已經說明了所有可能的途徑在碎片之間進行通信。

但一個好的方法是使用EventBus當你有很多活動和片段之間複雜的通信,它更方便,快捷,和一個更好的方法,然後任何這上面鏈接答案描述英寸