用于在RecyclerView适配器中创建接口的代码段

时间:2016-05-20 09:42:16

标签: android android-fragments recycler-adapter

我希望在RecyclerView适配器ViewHolder中单击按钮时调用片段中的方法。 我在网上发现,最好的方法是创建接口回调。

请告诉我一个用于创建此接口回调的代码段吗?

我的进步

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

    OnButtonClickListener mButtonClickListener = sButtonCallbacks;
    private Context mContext;

    //List of posts
    private List<PostItems> mPostItems;

    private final int VIEW_ITEM = 0;
    private final int VIEW_PROG = 1;

    private int lastPosition = -1;

   public PostAdapter(List<PostItems> postItems, Context context) {
       super();

       //Getting all posts
       this.mPostItems = postItems;
       this.mContext = context;
   }

    @Override
    public int getItemViewType(int position) {
        if (isPositionItem(position))
            return VIEW_ITEM;
        return VIEW_PROG;
    }

    private boolean isPositionItem(int position) {
       return position != getItemCount()-1;
    }

    public interface OnButtonClickListener {
        public void OnButtonClick ();
    }

    public static OnButtonClickListener sButtonCallbacks = new OnButtonClickListener() {
        @Override
        public void OnButtonClick() {

        }
    };

    @Override
    public RecyclerView.ViewHolder  onCreateViewHolder (ViewGroup parent, int viewType) {
        if (viewType == VIEW_ITEM) {
            View v =  LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.post_summ, parent, false);
            return new TextViewHolder(v);
        } else if (viewType == VIEW_PROG){
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.recyclerfooter, parent, false);
            return new ProgressViewHolder(v);
        }

        return null;
    }



    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        if (holder instanceof TextViewHolder) {

            final PostItems postList = mPostItems.get(position);
            ((TextViewHolder) holder).postBody.setText(Html.fromHtml(postList.getPost_body()));

        } else {
            ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
            ((ProgressViewHolder) holder).loadButton.setText(R.string.reload);
        }


    }

    @Override
    public int getItemCount(){
        //Return the number of items in the data set
        return mPostItems.size();
    }




    public static class TextViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextViewpostBody;

        public TextViewHolder (final View postView) {
            super(postView);
            postBody = (TextView) postView.findViewById(R.id.post_body);
        }

    }

    public static class ProgressViewHolder extends RecyclerView.ViewHolder implements  View.OnClickListener{
        Button loadButton;
        ProgressBar progressBar;
        public ProgressViewHolder(View footerView){
            super(footerView);
            loadButton = (Button) footerView.findViewById(R.id.reload_button);
            progressBar = (ProgressBar) footerView.findViewById(R.id.progress_load);

            loadButton.setOnClickListener(this);

            if(NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                progressBar.setVisibility(View.VISIBLE);


            } else if (!NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                loadButton.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onClick(View v) {
            if (v.getId() == loadButton.getId()) {
                //I can't access mButtonClickListener from here.
            }
        }
    }
}

我是janki gadhiya评论链接中的两个问题。

  1. 我无法从按钮的onClick上访问mButtonClickListener。
  2. 我不知道如何确保主机Activty实现接口。
  3. 拜托,我做错了什么?

0 个答案:

没有答案