每当我滚动列表时,所有颜色都会变为不同的颜色,列表顶部的文本会跳转到列表的底部。
刷新片段时,一切都得到修复,但滚动时会改变数据。将recyclerview设置为不可循环使用可以解决问题,但是我想看看是否还有另外一种方法,因为我仍然希望视图可以循环使用。
这是我的适配器代码:
@Override
public TaskViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.trial, parent, false);
TaskViewHolder viewHolder = new TaskViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(TaskViewHolder holder, int position) {
holder.bindHour(holder, mHomeClasses.get(position));
}
public class TaskViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
//public TextView mDetails;
public ImageView mPlusButton, mMicButton;
public TextView mNewTaskButton;
public TextView mNewExamButton;
//public TextView[] mTasks = new TextView[2];
private ImageView mTakePicButton;
private ImageView mGallaryButton;
public RecyclerView mExamsRecyclerView, mTasksRecyclerView;
public TextView mExamLabel;
public TextView mTaskLabel;
public TaskViewHolder(View itemView) {
super(itemView);
mItemView = itemView;
mTakePicButton = (ImageView)itemView.findViewById(R.id.takePicButton);
mGallaryButton = (ImageView)itemView.findViewById(R.id.gallaryButton);
mMicButton = (ImageView)itemView.findViewById(R.id.micButton);
mExamLabel = (TextView)itemView.findViewById(R.id.examLabel);
mTaskLabel = (TextView)itemView.findViewById(R.id.tasksLabel);
mExamLabel.setText(R.string.examLabel);
mTaskLabel.setText(R.string.taskLabel);
mClassTitle = (TextView)itemView.findViewById(R.id.wc1);
//mDetails = (TextView)itemView.findViewById(R.id.details);
mPlusButton = (ImageView) itemView.findViewById(R.id.plusButton);
// mTasks[0] = (TextView)itemView.findViewById(R.id.task1);
// mTasks[1] = (TextView)itemView.findViewById(R.id.task2);
//mExam1 = (TextView)itemView.findViewById(R.id.exam1);
//mExam2 = (TextView)itemView.findViewById(R.id.exam2);
mNewTaskButton = (TextView) itemView.findViewById(R.id.newTaskButton);
mNewExamButton = (TextView) itemView.findViewById(R.id.newExamButton);
mNewTaskButton.setVisibility(View.INVISIBLE);
mNewExamButton.setVisibility(View.INVISIBLE);
m = new MediaPlayer();
mExamsRecyclerView = (RecyclerView) itemView.findViewById(R.id.examRecyclerView);
mTasksRecyclerView = (RecyclerView) itemView.findViewById(R.id.tasksRecyclerView);
public void bindHour(TaskViewHolder holder, HomeClass homeClass){
Drawable background = mClassTitle.getBackground();
if (background instanceof ShapeDrawable) {
((ShapeDrawable)background).getPaint().setColor(homeClass.getColor());
} else if (background instanceof GradientDrawable) {
((GradientDrawable)background).setColor(homeClass.getColor());
} else if (background instanceof ColorDrawable) {
((ColorDrawable)background).setColor(homeClass.getColor());
}
mNewTaskButton.setVisibility(View.INVISIBLE);
mNewExamButton.setVisibility(View.INVISIBLE);
mExamLabel.setText(R.string.examLabel);
mTaskLabel.setText(R.string.taskLabel);
mNewTaskButton.setBackgroundColor(homeClass.getColor());
mNewExamButton.setBackgroundColor(homeClass.getColor());
Resources res = mContext.getResources();
int newColor = mContext.getResources().getColor(R.color.blueGray);
mPlusButton.setColorFilter(newColor, PorterDuff.Mode.SRC_ATOP);
mTakePicButton.setColorFilter(newColor, PorterDuff.Mode.SRC_ATOP);
mGallaryButton.setColorFilter(newColor, PorterDuff.Mode.SRC_ATOP);
mMicButton.setColorFilter(newColor, PorterDuff.Mode.SRC_ATOP);
mExamsRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));
mExamsRecyclerView.setAdapter(homeClass.getExamAdapter(getAdapterPosition()));
mTasksRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));
mTasksRecyclerView.setAdapter(homeClass.getTaskAdapter(getAdapterPosition()));
if (mExamLabel.getText().toString().equals(R.string.examLabel) && (mTaskLabel.getText().toString().equals(R.string.taskLabel))){
Drawable drawable = mContext.getResources().getDrawable(R.drawable.trial_outline);
mExamsRecyclerView.setBackground(drawable);
}
//mTasks[0].setText(homeClass.getTask1());
//mTasks[1].setText(homeClass.getTask2());
mClassTitle.setText(homeClass.getClassName());
//mDetails.setText("");
mPlusButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
animation.setDuration(250);
mPlusButton.startAnimation(animation);
if (mNewExamButton.getVisibility() == View.INVISIBLE) {
mNewTaskButton.setVisibility(View.VISIBLE);
mNewTaskButton.startAnimation(AnimationUtils.loadAnimation(mContext, android.R.anim.slide_in_left));
mNewExamButton.setVisibility(View.VISIBLE);
mNewExamButton.startAnimation(AnimationUtils.loadAnimation(mContext, android.R.anim.slide_in_left));
} else {
mNewTaskButton.setVisibility(View.INVISIBLE);
mNewTaskButton.startAnimation(AnimationUtils.loadAnimation(mContext, android.R.anim.slide_out_right));
mNewExamButton.setVisibility(View.INVISIBLE);
mNewExamButton.startAnimation(AnimationUtils.loadAnimation(mContext, android.R.anim.slide_out_right));
}
}
});
答案 0 :(得分:0)
对,这与RecyclerView有“问题”。他删除了视图并创建了新项目。当recycer想要创建他时,你可以保持元素的状态并恢复。