我有一个扩展RecycleView的适配器。Adapter和我遇到了一个问题,滚动将导致视图更改其可见性。我使用视图的可见性来模拟折叠或取消折叠状态,而滚动以某种方式仅从15个项目的列表中重置最后和第一个项目的可见性。
项目以文本视图显示的标题开头。单击该项将取消折叠该项,以显示也使用TextView显示的描述文本(我只是将具有描述文本的视图的可见性设置为VISIBLE)。单击描述文本将折叠该项(可见性设置为GONE),以仅显示初始标题文本。
为什么当我滚动到最后一个项目时,即使没有按下,它也会崩溃。此外,如果我将第一个项目取消折叠,滚动到底部将折叠第一个项目。这是我的设置。
public class TextAdapter extends RecyclerView.Adapter<TextAdapter.ViewHolder> {
private static final String TAG = TextAdapter.class.getSimpleName();
private Context mContext;
private ArrayList<TextDescription> alTextDesc;
public TextAdapter(Context context, ArrayList<TextDescription> textDesc) {
mContext = context;
alTextDesc = textDesc;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.ui_item_text_desc, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final TextDescription textDesc = alTextDesc.get(position);
holder.llParent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textDesc.isExpanded = !textDesc.isExpanded;
setExpanded(holder, textDesc);
}
});
setExpanded(holder, textDesc);
}
@Override
public int getItemCount() {
return alTextDesc.size();
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
private static void setExpanded(ViewHolder holder, TextDescription textDesc) {
if (textDesc != null) {
if (textDesc.isExpanded) {
// display full description
llContent.setVisibility(View.VISIBLE);
} else {
// display title
llContent.setVisibility(View.GONE);
}
}
}
public static class ViewHolder extends RecyclerView.ViewHolder {
LinearLayout llParent;
LinearLayout llContent;
public ViewHolder(View v) {
super(v);
llParent = (LinearLayout) v.findViewById(R.id.ll_parent);
llContent = (LinearLayout) v.findViewById(R.id.ll_content);
}
}
My TextDescription模型类只不过是一个布尔值
public boolean isExpanded;
对我做得不正确的地方有什么建议吗?提前谢谢你!
编辑
我还尝试在更改属性扩展值后更新ArrayList,结果仍然相同
holder.llParent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textDesc.isExpanded = !textDesc.isExpanded;
alTextDesc.set(position, textDesc); //tried to update the list with updated value
setExpanded(holder, textDesc);
}
});