当我滚动回收器视图然后向后滚动项目互换时,数据会互换。我有单独的项目与子项目的arraylist没有特定的大小。通常,当我向后滚动时,子项目重复和/或子项目的交换。我已经尝试将代码的动态部分移动到oncreateviewholder,但这并没有任何区别。
private LinkedHashMap<String, ArrayList<String>> messages;
private Context mContext;
int k =0;
public static class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public TextView mSmsSender;
public LinearLayout smsContainer;
public ViewHolder(View v) {
super(v);
mSmsSender = (TextView)v.findViewById(R.id.smsSender);
smsContainer = (LinearLayout) v.findViewById(R.id.smsContainer);
}
}
public SmsAdapter(LinkedHashMap<String, ArrayList<String>> messages, Context context){
this.messages = messages;
mContext = context;
}
@Override
public SmsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.sms_message, parent, false);
// set the view's size, margins, paddings and layout parameters
ViewHolder vh = new ViewHolder(v);
final String smsSender = (new ArrayList<String>(messages.keySet())).get(k);
k++;
ArrayList<String> sms = messages.get(smsSender);
for(int i =0;i<sms.size();i++){
TextView vt = new TextView(mContext);
RelativeLayout.LayoutParams lp = new RelativeLayout.
LayoutParams(LinearLayoutCompat.LayoutParams.WRAP_CONTENT,
LinearLayoutCompat.LayoutParams.WRAP_CONTENT);
vt.setLayoutParams(lp);
vt.setPadding(3,3,3,3);
vt.setText(sms.get(i));
vh.smsContainer.addView(vt);
}
return vh;
}
@Override
public void onBindViewHolder(SmsAdapter.ViewHolder holder, int position) {
final String smsSender = (new ArrayList<String>(messages.keySet())).get(position);
holder.mSmsSender.setText(smsSender);
}
@Override
public int getItemCount() {
return messages.size();
}
}
答案 0 :(得分:1)
那是因为你没有绑定新视图。在每个动态调用中创建一个新的。请在onBindViewHolder中执行你的操作。至于onCreateViewHolder,保持它干净,只对视图充气。
答案 1 :(得分:-1)
试试这个:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="box popup-trigger">Trigger popup #1</span>
<span class="box popup-trigger-b">Trigger popup #2</span>
<span class="box popup-trigger-c">Trigger popup #3</span>
<hr/>
<div class="popup-new popup" style="display:none">Popup #1 <span class="popup-btn-close">X</span></div>
<div class="popup-new-b popup" style="display:none">Popup #2 <span class="popup-btn-close">X</span></div>
<div class="popup-new-c popup" style="display:none">Popup #3 <span class="popup-btn-close">X</span></div>