Android 如何从活动/片段调用ViewHolder方法
我有三门课,即。一个片段、一个RecycleServiceAdapter和一个RecycleServiceWholder。他们照常工作。但是现在我遇到了一个问题,我需要从上述活动调用ViewHolder中的一个方法 我曾想过使用回调,但我尝试过,但它不起作用。这就是我到目前为止所做的: 界面Android 如何从活动/片段调用ViewHolder方法,android,interface,android-recyclerview,android-viewholder,Android,Interface,Android Recyclerview,Android Viewholder,我有三门课,即。一个片段、一个RecycleServiceAdapter和一个RecycleServiceWholder。他们照常工作。但是现在我遇到了一个问题,我需要从上述活动调用ViewHolder中的一个方法 我曾想过使用回调,但我尝试过,但它不起作用。这就是我到目前为止所做的: 界面 public interface TreeBottomListener { enum Status {FAILED, SUCCESS, PRE_REQUEST} void onRespons
public interface TreeBottomListener {
enum Status {FAILED, SUCCESS, PRE_REQUEST}
void onResponse(Status status);
}
视图持有者
public class TreeBottomViewHolder extends RecyclerView.ViewHolder implements TreeBottomListener{
@BindView(R.id.tree_bottom_progress) ProgressBar bottomProgress;
@BindView(R.id.tree_error_button) Button moreRetryButton;
private TreeAdapterListener listener;
private final String TAG = "TreeBottomViewHolder";
public TreeBottomViewHolder(View itemView, final TreeAdapterListener listener) {
super(itemView);
ButterKnife.bind(this, itemView);
this.listener = listener;
setUpViews();
}
private void setUpViews() {
bottomProgress.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor
(itemView.getContext(), R.color.colorAccent), PorterDuff.Mode.SRC_IN);
moreRetryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setVisibility(View.GONE);
listener.onLoadMoreClicked();
}
});
}
@Override
public void onResponse(Status status) {
processViews(status);
}
private void processViews(Status status) {
// This method is never called
Log.i(TAG, "onResponse: with status " + status);
if (status == Status.FAILED) {
bottomProgress.setVisibility(View.GONE);
moreRetryButton.setVisibility(View.VISIBLE);
} else if (status == Status.SUCCESS) {
bottomProgress.setVisibility(View.GONE);
} else if (status == Status.PRE_REQUEST) {
bottomProgress.setVisibility(View.VISIBLE);
}
}
}
片段
private TreeBottomListener bottomListener = bottomCallbacks;
private static TreeBottomListener bottomCallbacks = new TreeBottomListener() {
@Override
public void onResponse(Status status) {
}
};
// I do this say when a network request is about to be sent
bottomListener.onResponse(TreeBottomListener.Status.PRE_REQUEST);
您可以调用此方法
(YourAdapter.TreeBottomViewHolder)recyclerView.findviewholder for layoutposition(position)代码>
它返回ViewHolder,您可以使用以下代码检查项目位置:
private boolean isCurrentListViewItemVisible(int position) {
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
int first = layoutManager.findFirstVisibleItemPosition();
int last = layoutManager.findLastVisibleItemPosition();
return first <= position && position <= last;
}
我希望它能对您有所帮助。请将此作为参考reference@vijaychhalotre谢谢我以前见过,但我想做的是相反的,即从Fragment/Activity调用ViewHolder方法。这将使您的代码紧密耦合并且非常复杂。适配器任务应该是在列表或recyclerView中显示项目。活动不应与适配器或ViewHolder直接交互。如果要刷新列表项,请更改适配器数据列表并调用notifydatasetChange方法。由于未知原因,它将返回null。
TreeBottomViewHolder holder = (YourAdapter.TreeBottomViewHolder)recyclerView.findViewHolderForLayoutPosition(position);
if(isCurrentListViewItemVisible(position)){
// you can access your views here
}