1

我在我的片段一中创建了一个 RecyclerView 并且我已经创建了一个 RecyclerViewAdapter 来将我的日期集绑定到在我的片段一的 RecyclerView 中显示的视图。我已经在我的主要活动中加载了我的片段之一。现在我有一个问题是我需要在主活动中创建一个接口,并通过接口将数据从我的适配器传递到主活动,以便我可以将数据包装到包中并加载片段二。但我不知道该怎么做。有人能帮我吗?

这是我的主要活动。

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FragmentOne fragmentOne = new FragmentOne();
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().add(R.id.fragment_container,fragmentOne).commit();

}}

这是我的片段一。

public class FragmentOne extends Fragment {
public RecyclerView recyclerView;
public ArrayList<Promotion> promotionArrayList;
public MyAdapter myAdapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_fragment_one, container, false);
    recyclerView = (RecyclerView)view.findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    DividerItemDecoration divider = new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL);
    recyclerView.addItemDecoration(divider);
    promotionArrayList = Promotion.createPromotionList();
    myAdapter = new MyAdapter(promotionArrayList);
    recyclerView.setAdapter(myAdapter);
    return view;
}}

这是我的适配器。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

public ArrayList<Promotion> promotionArrayList;


public MyAdapter(ArrayList<Promotion>promotionArrayList) {
    this.promotionArrayList = promotionArrayList;
}

@NonNull
@Override
public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_layout,viewGroup,false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
    Promotion promotion = promotionArrayList.get(i);
    viewHolder.imageView.setImageResource(promotion.getImgId());
    viewHolder.promotion_period.setText(promotion.getPromotion_period());
    viewHolder.promotion_deals.setText(promotion.getPromotion_deals());
    viewHolder.shop_name.setText(promotion.getShop_name());
}

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

public static class ViewHolder extends RecyclerView.ViewHolder{

    public TextView shop_name,promotion_deals, promotion_period;
    public ImageView imageView;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        shop_name = (TextView)itemView.findViewById(R.id.shop_name);
        promotion_deals = (TextView)itemView.findViewById(R.id.promotion_deals);
        promotion_period = (TextView)itemView.findViewById(R.id.promotion_period);
        imageView = (ImageView)itemView.findViewById(R.id.imageView);
    }
}}

这就是我想做的

4

2 回答 2

1

步骤 1. 创建接口

public interface RecyclerViewItemInterface {

    void onItemClick(int position, String path);

}

Step 2. 在Adapter中编写set方法

private RecyclerViewItemInterface viewItemInterface;

 public void setViewItemInterface(RecyclerViewItemInterface viewItemInterface) {
        this.viewItemInterface = viewItemInterface;
    }

步骤 3. 像这样传递数据和调用方法

holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    if (viewItemInterface != null) {
                        viewItemInterface.onItemClick(holder.getAdapterPosition(),"");
                    }
                }
            });

步骤 4. 像这样实现接口

bgImageAdapterNEW.setViewItemInterface(new RecyclerViewItemInterface() {

            @Override
            public void onItemClick(int position, String path) {

            }
        });
于 2018-10-22T03:42:42.170 回答
0

正如你上面所说:在 MyAdapter 你可以添加

public interface onItemClickListener {
    public void onItemCLickListener(int position);
}

在 onBindViewHolder 中,您可以在单击时使用所需的特定视图设置侦听器:

holder.viewYouWant.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onItemClickListener != null)
                    onItemClickListener.onItemCLickListener(position,data);
            }
 });

在 MainActivity 实现 OnItemClickListener 然后将数据包装成包并将其发送到您可以在此处关注的片段: RecyclerView 适配器的单击侦听器

于 2018-10-19T06:39:15.090 回答