【发布时间】:2017-02-06 15:19:12
【问题描述】:
我在 Recyclerview 中使用分页。我在 RecyclerView.ViewHolder 中使用了两种布局。我想从另一个类更改按钮单击的布局。
public class PollListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private List<PollList> pollLists;
RecyclerView mrecyclerView;
private int VIEW_TYPE_ITEM = 0;
private int VIEW_TYPE_LOADING = 1;
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView question, description, createdTime, closedTime;
public MyViewHolder(View view) {
super(view);
question = (TextView) view.findViewById(R.id.questionPoll);
description = (TextView) view.findViewById(R.id.descriptionPoll);
}
}
public static class LoadingViewHolder extends RecyclerView.ViewHolder {
public static ProgressBar progressBar;
public LoadingViewHolder(View itemView) {
super(itemView);
progressBar = (ProgressBar) itemView.findViewById(R.id.progressBar1);
}
}
public PollListAdapter(List<PollList> pollLists, RecyclerView recyclerView, Context con){
this.pollLists = pollLists;
this.mrecyclerView = recyclerView;
this.con = con;
mrecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
totalItemCount = linearLayoutManager.getItemCount();
lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
if (NewsFragment.nextPageURL != null) {
if (!isLoading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
if (mOnLoadMoreListener != null) {
mOnLoadMoreListener.onLoadMore();
}
isLoading = true;
}
}
}
});
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == VIEW_TYPE_ITEM) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.poll_row, parent, false);
return new MyViewHolder(itemView);
} else if (viewType == VIEW_TYPE_LOADING) {
View view = LayoutInflater.from(con).inflate(R.layout.layout_loading_item, parent, false);
return new LoadingViewHolder(view);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof MyViewHolder) {
PollList poll_list = pollLists.get(position);
MyViewHolder viewHolder = (MyViewHolder) holder;
viewHolder.question.setText(poll_list.getTitle());
viewHolder.description.setText(poll_list.getDescription());
viewHolder.createdTime.setText(poll_list.getCreatedAt());
} else if (holder instanceof LoadingViewHolder){
LoadingViewHolder loadingViewHolder = (LoadingViewHolder) holder;
loadingViewHolder.progressBar.setIndeterminate(true);
}
}
@Override
public int getItemViewType(int position) {
return pollLists.get(position) == null ? VIEW_TYPE_LOADING : VIEW_TYPE_ITEM;
}
@Override
public int getItemCount() {
return pollLists == null ? 0 : pollLists.size();
}
public void setLoaded() {
isLoading = false;
}
public void setOnLoadMoreListener(OnLoadMoreListener mOnLoadMoreListener) {
this.mOnLoadMoreListener = mOnLoadMoreListener;
}
}
上面的适配器显示了多个布局视图及其条件
按钮点击
这是按钮单击的代码
createGroupButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
groupName.setText("");
groupStatus.clearCheck();
groupVisibility.clearCheck();
finish();
GroupFragment.groupvalues.clear();
GroupFragment.GroupData groupDataRefresh = new GroupFragment.GroupData();
groupDataRefresh.execute();
}
});
【问题讨论】:
-
点击的按钮是在recyclerview还是在单独的view中?
-
不在 Recyclerview 中。它在单独的视图中
-
在您的适配器中创建一个公共变量,将视图类型存储为
VIEW_TYPE_LOADING或VIEW_TYPE_ITEM,并在您想要的任何位置单击按钮进行更改。 -
你应该在适配器内部创建方法,并从你的主类中调用它 adapter.method。不能给你更多信息,因为你没有提供 Reyclerview 适配器的完整实现
-
我想在按钮点击时选择我想要的布局。
标签: android pagination android-recyclerview