0
我爲ListView
創建了可展開的項目,並且視圖可以正確回收。 問題是當我展開其中一個項目時,一些隱藏的項目也被擴展了,這顯然是我不想要的。Android ListView已回收 - 可展開的項目
例如,如果我展開列表中第二個位置的項目,則第8個項目也展開。反之亦然。 這看起來是一個未正確摺疊的再循環視圖。
以下是展開/摺疊項目的一些快速屏幕。
這裏是我使用的代碼來創建這些項目:
LayoutInflater inflater = (LayoutInflater) fragment.getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final MessageHolder holder;
if (convertView == null)
{
convertView = inflater.inflate(R.layout.test_message, parent, false);
holder = new MessageHolder();
// Retrieve layout elements
holder.card = new WeakReference<ExpandableCardLayout>((ExpandableCardLayout) convertView.findViewById(R.id.card));
holder.layout_comments = new WeakReference<LinearLayout>((LinearLayout) convertView.findViewById(R.id.layout_comments));
holder.layout_loading = new WeakReference<LinearLayout>((LinearLayout) convertView.findViewById(R.id.layout_loading));
holder.spinner_loading = new WeakReference<FlatLoadingSpinner>((FlatLoadingSpinner) convertView.findViewById(R.id.spinner_loading));
// Attach holder
convertView.setTag(holder);
}
else
{
holder = (MessageHolder) convertView.getTag();
}
// Attach listener
holder.card.get().setOnExpandListener(new OnExpandListener() {
@Override
public void onExpand()
{
handler.postDelayed(new Runnable() {
@Override
public void run()
{
// Hide loading
holder.layout_loading.get().setVisibility(View.GONE);
// Add comments
List<View> comments = buildComments(null);
for (int i=0; i<comments.size(); i++) holder.layout_comments.get().addView(comments.get(i));
}
}, 1000);
}
@Override
public void onCollapse()
{
// Remove everything
while (holder.layout_comments.get().getChildCount() > 0) holder.layout_comments.get().removeViewAt(0);
// Show loading
holder.layout_loading.get().setVisibility(View.VISIBLE);
}
});
return convertView;
我的問題是:如何避免在回收元素被擴大了崩潰的看法?
你好,謝謝你的回答。我必須在哪裏做到這一點?我使用'WeakReference'來處理'ImageView'中的'Bitmap'。 – Manitoba 2014-10-18 17:00:18
我自己做的。謝謝你的幫助 ! – Manitoba 2014-10-18 17:15:12