Android textview 与 recyclerview 的可见性
Android textview visibility with recycle view
我已经设置了一个应用程序,它使用 SQL 数据库中的信息填充回收视图,例如日期和时间等...我最近设置了一个小部分,它根据上面的文本视图是否相同来显示或隐藏文本视图。例如,它将使用 13/06/2017 填充第一个 Textview 并使其可见,如果它要显示的下一个日期是相同的,那么它将简单地隐藏 textview,允许具有相同日期的多个结果相互堆叠。
问题
我的代码正常工作,并且正确堆叠。我遇到的问题是,当我向下滚动页面并再次向上滚动时,所有 headers 都消失了。这是因为我没有正确设置我的 viewHolder。你能不能给我一些情况的指导。
绑定视图
允许堆叠多个重复结果的代码
if (position - 1 >= 0) {
String currentDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date"));
cursor.moveToPosition(position - 1 );
String previousDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date"));
Log.i("storedDates", currentDate);
if (currentDate.equalsIgnoreCase(previousDate)) {
txtHeader.setVisibility(View.GONE);
cardView.setVisibility(View.GONE);
} else {
txtHeader.setVisibility(View.VISIBLE);
txtHeader.setText(currentDate);
}
} else {
txtHeader.setVisibility(View.VISIBLE);
txtHeader.setText(cursor.getString(cursor.getColumnIndexOrThrow("complete_date")));
}
启动ViewHolder
public static class Viewholder extends RecyclerView.ViewHolder{
TextView header;
public Viewholder(View itemView) {
super(itemView);
header = (TextView) itemView.findViewById(R.id.txtHeader);
}
}
OncreateViewholder 和 OnBindViewHolder
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mCursorAdapter.newView(mContext,mCursorAdapter.getCursor(), parent);
return new Viewholder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
mCursorAdapter.getCursor().moveToPosition(position);
mCursorAdapter.bindView(holder.itemView, mContext, mCursorAdapter.getCursor());
}
@Override
public int getItemCount() {
return mCursorAdapter.getCount();
}
如有任何建议,我们将不胜感激
您缺少 cardView 可见性,因此您在设置 txtHeader 可见性的地方也设置了 cardView 可见性
if (position - 1 >= 0) {
String currentDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date"));
cursor.moveToPosition(position - 1 );
String previousDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date"));
Log.i("storedDates", currentDate);
if (currentDate.equalsIgnoreCase(previousDate)) {
txtHeader.setVisibility(View.GONE);
cardView.setVisibility(View.GONE);
} else {
cardView.setVisibility(View.VISIBLE);
txtHeader.setVisibility(View.VISIBLE);
txtHeader.setText(currentDate);
}
} else {
cardView.setVisibility(View.VISIBLE);
txtHeader.setVisibility(View.VISIBLE);
txtHeader.setText(cursor.getString(cursor.getColumnIndexOrThrow("complete_date")));
}
我已经设置了一个应用程序,它使用 SQL 数据库中的信息填充回收视图,例如日期和时间等...我最近设置了一个小部分,它根据上面的文本视图是否相同来显示或隐藏文本视图。例如,它将使用 13/06/2017 填充第一个 Textview 并使其可见,如果它要显示的下一个日期是相同的,那么它将简单地隐藏 textview,允许具有相同日期的多个结果相互堆叠。
问题 我的代码正常工作,并且正确堆叠。我遇到的问题是,当我向下滚动页面并再次向上滚动时,所有 headers 都消失了。这是因为我没有正确设置我的 viewHolder。你能不能给我一些情况的指导。
绑定视图
允许堆叠多个重复结果的代码
if (position - 1 >= 0) {
String currentDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date"));
cursor.moveToPosition(position - 1 );
String previousDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date"));
Log.i("storedDates", currentDate);
if (currentDate.equalsIgnoreCase(previousDate)) {
txtHeader.setVisibility(View.GONE);
cardView.setVisibility(View.GONE);
} else {
txtHeader.setVisibility(View.VISIBLE);
txtHeader.setText(currentDate);
}
} else {
txtHeader.setVisibility(View.VISIBLE);
txtHeader.setText(cursor.getString(cursor.getColumnIndexOrThrow("complete_date")));
}
启动ViewHolder
public static class Viewholder extends RecyclerView.ViewHolder{
TextView header;
public Viewholder(View itemView) {
super(itemView);
header = (TextView) itemView.findViewById(R.id.txtHeader);
}
}
OncreateViewholder 和 OnBindViewHolder
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mCursorAdapter.newView(mContext,mCursorAdapter.getCursor(), parent);
return new Viewholder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
mCursorAdapter.getCursor().moveToPosition(position);
mCursorAdapter.bindView(holder.itemView, mContext, mCursorAdapter.getCursor());
}
@Override
public int getItemCount() {
return mCursorAdapter.getCount();
}
如有任何建议,我们将不胜感激
您缺少 cardView 可见性,因此您在设置 txtHeader 可见性的地方也设置了 cardView 可见性
if (position - 1 >= 0) {
String currentDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date"));
cursor.moveToPosition(position - 1 );
String previousDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date"));
Log.i("storedDates", currentDate);
if (currentDate.equalsIgnoreCase(previousDate)) {
txtHeader.setVisibility(View.GONE);
cardView.setVisibility(View.GONE);
} else {
cardView.setVisibility(View.VISIBLE);
txtHeader.setVisibility(View.VISIBLE);
txtHeader.setText(currentDate);
}
} else {
cardView.setVisibility(View.VISIBLE);
txtHeader.setVisibility(View.VISIBLE);
txtHeader.setText(cursor.getString(cursor.getColumnIndexOrThrow("complete_date")));
}