如何使用接口将数据适配器传递给片段类?

时间:2020-02-24 09:51:36

标签: android

我正在尝试使用接口将数据适配器类传递给Fragment。我已经创建了prize_breakup.setOnClickListener,当我单击按钮时,Fragment将加载并从Adapter获取数据。当我运行代码时,它没有显示任何错误,但也没有显示结果。

...........................................这是适配器类。 .........................................

public class LiveContestAdapter extends RecyclerView.Adapter<LiveContestAdapter.MyViewHolder> {
    Context context;
    List<Contest_Data> contest_data;
    public TextView Quantity;
    public ImageButton btnIncrease,btnDecrease;
    private int mCounter = 1;
    private LiveContest  live_contest;
    Bundle bundle = new Bundle();

    public interface LiveContest{
        void onClick(int position);
    }

 public LiveContestAdapter(Context context,  List<Contest_Data> contest_data, LiveContest live_contest) {
        this.context=context;
        this.contest_data=contest_data;
        this.live_contest = live_contest;
    }
public LiveContestAdapter(Context context,  List<Contest_Data> contest_data) {
    this.context=context;
    this.contest_data=contest_data;
}

    @NonNull
    @Override
   public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
  context=viewGroup.getContext();
View vh=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.custom_list_win_iphone,viewGroup,false);
        MyViewHolder myViewHolder=new MyViewHolder(vh);

        return myViewHolder;
    }



@Override
 public void onBindViewHolder(@NonNull final LiveContestAdapter.MyViewHolder myViewHolder, final int i) {
            final Contest_Data contest_position = contest_data.get(i);
            Picasso.with(context).load(contest_data.get(i).getContestImage()).error(R.drawable.damme).placeholder(R.drawable.damme).into(myViewHolder.img);
            myViewHolder.remainSlot.setText(contest_data.get(i).getContestTotal_slot());
            myViewHolder.ent_fee.setText(contest_data.get(i).getContestEntry_Fee());
            myViewHolder.Booked_Slot.setText(contest_data.get(i).getContestBooked());
            String contest_status = contest_data.get(i).getContestStatus();
            String previous_contest = contest_data.get(i).getPrevious_contest();
            String winner_announce = contest_data.get(i).getWinner_announce();


     myViewHolder.prize_breakup.setOnClickListener(new View.OnClickListener(){
      @Override
      public void onClick(View v)
                {
                    live_contest.onClick(i);
                }
            });    
        }

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

        public class MyViewHolder extends RecyclerView.ViewHolder {

            TextView name;
            ImageView img;
            TextView remainSlot;
            Button ent_fee;
            TextView totalslot;
            Button tandc;
            TextView eDate;
            Button share;
            Button prize_breakup;
            TextView Booked_Slot;
            ImageButton btnplus;
            ImageButton btnminus;
            TextView counter;
            Button htp;

            public MyViewHolder(@NonNull View itemView) {
                super(itemView);
                //name=itemView.findViewById(R.id.totalslot);
                img=itemView.findViewById(R.id.imageView2);
                htp = itemView.findViewById(R.id.button2);
                remainSlot=itemView.findViewById(R.id.tvTotalSlotNumber);
                ent_fee= itemView.findViewById(R.id.btnPrice);
                Booked_Slot = itemView.findViewById(R.id.tvSlotBookNumber);
                eDate = itemView.findViewById(R.id.tvDate1);
                tandc = itemView.findViewById(R.id.btnTerms);
                share= itemView.findViewById(R.id.btnShare);
                prize_breakup = itemView.findViewById(R.id.button3);
                btnplus = itemView.findViewById(R.id.ibIncrease);
                btnminus = itemView.findViewById(R.id.ibDecrese);
                counter  = itemView.findViewById(R.id.tvQuantity);
                //entery_fee = itemView.findViewById(R.id.buy_ticket);
            }
        }
    }

............................该片段类....... ...........................

public class PrizeLayout extends Fragment implements LiveContestAdapter.LiveContest {

    List<Contest_Data> contest_data ;
    LiveContestAdapter live_contest_adapter;
    TextView nameFragTxt,yearFragTxt;
    String contest_id, contest_name;
    Intent intent;

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

        View rootView =inflater.inflate(R.layout.prize_layout,container,false);


        live_contest_adapter = new LiveContestAdapter(getContext(), contest_data, new LiveContestAdapter.LiveContest(){
        @Override
        public void onClick(int position) {
        Toast.makeText(getContext(), "click ok button at" + position, LENGTH_LONG).show();
    }
        });


        return rootView;
    }


    @Override
    public void onClick(int position) {

    }
}

1 个答案:

答案 0 :(得分:0)

尝试使用此

片段:-

 public class HomeFragment extends Fragment {

    List<String> contest_data;
    LiveContestAdapter live_contest_adapter;

    public static HomeFragment newInstance() {
        return new HomeFragment();
    }

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

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

        RecyclerView recyclerView = view.findViewById(R.id.recyclerView);
        live_contest_adapter = new LiveContestAdapter(getContext(), contest_data, new LiveContestAdapter.LiveContest() {
            @Override
            public void onClick(int position) {
                Toast.makeText(getContext(), "click ok button at" + position, LENGTH_LONG).show();
            }
        });
        recyclerView.setAdapter(live_contest_adapter);

        return view;
    }


}

适配器:-

    public class LiveContestAdapter extends RecyclerView.Adapter<LiveContestAdapter.MyViewHolder> {
    Context context;
    List<String> contest_data;
    public TextView Quantity;
    public ImageButton btnIncrease, btnDecrease;
    private int mCounter = 1;
    private LiveContest live_contest;
    Bundle bundle = new Bundle();

    public interface LiveContest {
        void onClick(int position);
    }

    public LiveContestAdapter(Context context, List<String> contest_data, LiveContest live_contest) {
        this.context = context;
        this.contest_data = contest_data;
        this.live_contest = live_contest;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        context = viewGroup.getContext();
        View vh = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.custom_list_win_iphone, viewGroup, false);
        MyViewHolder myViewHolder = new MyViewHolder(vh);

        return myViewHolder;
    }


    @Override
    public void onBindViewHolder(@NonNull final LiveContestAdapter.MyViewHolder myViewHolder, final int pos) {
        myViewHolder.prize_breakup.setText("Button " + pos);

        myViewHolder.prize_breakup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                live_contest.onClick(pos);
            }
        });
    }

    @Override
    public int getItemCount() {
        return 10;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {

        Button prize_breakup;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            prize_breakup = itemView.findViewById(R.id.prize_breakup);
        }
    }
}

输出为

click here