我的问题很简单,为什么会出现卡顿现象?
这个布局:
这个布局:
<ScrollView>
<RelativeLayout>
<RecyclerView1/>
<RecyclerView2/>
<RecyclerView3/>
</RelativeLayout>
</ScrollView>
recyclerview(1,2)是横向的,而(3)是纵向的高度为wrap_content。当我滑动到rv(3)时,它不会出现延迟,只有在显示rv(1,2)时才会。
足够了解基础知识,为什么在填充子项时会出现卡顿,而在空置时却没有?这对我来说毫无意义。
我相信背景中有很多我不知道的事情。措施或其他什么?有人知道发生了什么吗?或者如果有人能帮我指点一下正确的方向来解决这个问题。我做的某些事情被反感了吗?
为了澄清事情,我包括RV的ViewHolder和Adapter:
ViewHolder
public class ObjHolder extends RecyclerView.ViewHolder {
private static String TAG = "[ObjHolder]";
public Obj mObj;
public CardView mContainer;
public TextView mAttr1;
public TextView mAttr2;
public TextView mAttr3;
public TextView mAttr4;
public TextView mAttr5;
public OnObjClickListener mCallback = null;
public ObjHolder(View v) {
super(v);
mContainer = (CardView) v;
mAttr1 = (TextView) mContainer.findViewById(R.id.obj_details_attr1);
mAttr2 = (TextView) mContainer.findViewById(R.id.obj_details_attr2);
mAttr3 = (TextView) mContainer.findViewById(R.id.obj_details_attr3);
mAttr4 = (TextView) mContainer.findViewById(R.id.obj_details_attr4);
mAttr5 = (TextView) mContainer.findViewById(R.id.obj_details_attr5);
mContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (DEBUG) Log.d(TAG, "onClick()");
if (mCallback != null) mCallback.onObjClick(mObj);
}
});
}
public void setOnObjClickListener(OnObjClickListener onObjClickListener) {
mCallback = onObjClickListener;
}
}
适配器
public class ObjAdapter extends AbstractCursorRecyclerViewAdapter<RecyclerView.ViewHolder> implements OnObjClickListener {
private static final String TAG = "[ObjAdapter]";
private OnObjClickListener mCallback = null;
public ObjAdapter( Context context, Cursor cursor) {
super(context, cursor);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, Cursor cursor) {
if (viewHolder instanceof ObjHolder) {
ObjHolder objHolder = (ObjHolder) viewHolder;
final Obj obj = new Obj(cursor);
objHolder.mAttr1.setText(obj.attr1);
objHolder.mAttr2.setText(obj.attr2);
objHolder.mAttr3.setText(obj.attr3);
objHolder.mAttr4.setText(obj.attr4);
objHolder.mAttr5.setText(obj.attr5);
objHolder.mObj = obj;
objHolder.setOnObjClickListener(this);
MyDatabase db = MyDatabase.getInstance(getContext());
Cursor childCursor = db.getChildren(obj);
// Count children who matters to present in the card
int attribMatch = 0;
try {
while (childCursor.moveToNext()) {
if (childCursor.getString(1) != null) {
int newStatusValue = Integer.parseInt(childCursor.getString(1));
if (newStatusValue >= 5) attribMatch++;
}
}
}
finally {
childCursor.close();
}
if (Integer.parseInt(obj.statusValue) >= 10) objHolder.mContainer.setForeground(ContextCompat.getDrawable(getContext(), R.drawable.bg_warning_border));
objHolder.mAttrib1.setText(""
+ attribMatch);
if (attribMatch > 0) objHolder.mAttrib2.setTextColor(getContext().getResources().getColor(R.color.red));
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
return new ObjHolder(
LayoutInflater.from(parent.getContext()).inflate(R.layout.obj_details, parent, false));
}
public void setOnObjClickListener(OnObjClickListener onObjClickListener) {
mCallback = onObjClickListener;
}
@Override
public void onObjClick(Obj obj) {
if (mCallback != null) mCallback.onObjClick(obj);
}
}