片段通信 - 碎片片段

时间:2016-07-21 11:14:19

标签: android android-fragments

我需要帮助了解以下场景的工作原理以及如何实现结果。

我有一个名为ShoppingCart的班级。 它有一个名为addItemsToShoppingCartFromPreviousOrder的方法。 现在我有一个名为PreviousOrderFragment的片段,其onCreateView方法正在使用RecyclerView。它是以前订单的清单。 我有多个列表。现在我想知道如何将addItemsToShoppingCartFromPreviousOrder方法从ShoppingCart调用到我的片段中。 这样当用户点击列表时,它就会添加到购物车中。

3 个答案:

答案 0 :(得分:1)

你需要这样做:

在你的RecycleView适配器中放置:

<activity>

项目=所选项目

...他们 在适配器的ViewHolder中输入:

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

OBS:ViewHolder是适配器的InnerClass

他们所需要做的就是:

在你的片段中

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

他们制作你的片段:

mRecycleViewAdapter.setmListener(this)

并覆盖:

public class MyFragment extends Fragment implements MyRecycleViewAdapter.ItemListener

Here就是一个例子, 请参阅SearchFragment.javaUsersListAdapter.java

答案 1 :(得分: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*/);
  }

}

答案 2 :(得分:0)

参见this answer,已经解释了在片段之间进行通信的所有可能方法。

但是,当您在多个活动和碎片之间进行复杂的沟通时,一个好方法是使用 EventBus ,它非常简单快捷,而且比任何一个更好这在上面的相关答案中有描述。