我希望在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评论链接中的两个问题。
拜托,我做错了什么?