在ListView单元格中重复数组元素会发出解析服务器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在ListView单元格中重复数组元素会发出解析服务器相关的知识,希望对你有一定的参考价值。
我有这段代码,它根据每个帖子从Parse服务器数据库中获取主题标签数组:
// Tags
List<String> tagsArray = new ArrayList<>();
if (pObj.getList(Configurations.POSTS_TAGS) != null) {
tagsArray = pObj.getList(Configurations.POSTS_TAGS);
Log.i(Configurations.TAG, "TAGS: " + tagsArray);
for (int i=0; i<tagsArray.size(); i++) {
LinearLayout tagsLayout = finalCell.findViewById(R.id.cpTagsLayout);
tagsLayout.setOrientation(LinearLayout.HORIZONTAL);
// Create Buttons
final Button tButt = new Button(ctx);
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 44, getResources().getDisplayMetrics());
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, height);
lp.setMargins(3, 0, 3, 0);
tButt.setLayoutParams(lp);
tButt.setText(tagsArray.get(i));
tButt.setTypeface(Configurations.osItalic); tButt.setTextColor(Color.parseColor("#777777")); tButt.setBackgroundColor(Color.parseColor("#00000000"));
tButt.setTextSize(10);
tButt.setAllCaps(false);
tButt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String tag = tButt.getText().toString();
Log.i(Configurations.TAG, "SELECTED TAG: " + tag);
}});
// Add button to the layout
tagsLayout.addView(tButt);
}// ./For loop
}// ./ If
应用程序在向下滚动ListView时正确获取标记数组,我通过检查Logcat来了解它:
I/log-: TAGS: [#quoteoftheday, #fun, #life]
I/log-: TAGS: [#breakfastinlove, #lifestyle, #pikkypic]
I/log-: TAGS: [#bigapple, #lifestyle]
无论如何,从第3个单元格开质,即使我再次滚动ListView,我在每个单元格的Scrollview中得到额外的按钮,它们是前面数组的总和,所以例如,第3个单元格显示以下按钮一排: #quoteoftheday #fun #life #breakfastinlove,#lifestyle,#pikkypic,#bigapple,#lifestyle
虽然它应该只显示: #bigapple #lifestyle
无论我在哪里滚动ListView,Logcat都会一直显示正确的标记数组,这意味着每个tagsArray
都可以从服务器中正确获取。
我该如何解决这个奇怪的问题? 谢谢!
答案
在添加新标签行之前,您需要为标签布局调用removeAllViews。检查以下更正的代码:
List<String> tagsArray = new ArrayList<>();
if (pObj.getList(Configurations.POSTS_TAGS) != null) {
tagsArray = pObj.getList(Configurations.POSTS_TAGS);
Log.i(Configurations.TAG, "TAGS: " + tagsArray);
LinearLayout tagsLayout = finalCell.findViewById(R.id.cpTagsLayout);
tagsLayout.setOrientation(LinearLayout.HORIZONTAL);
tagsLayout.removeAllViews();
for (int i=0; i<tagsArray.size(); i++) {
// Create Buttons
final Button tButt = new Button(ctx);
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 44, getResources().getDisplayMetrics());
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, height);
lp.setMargins(3, 0, 3, 0);
tButt.setLayoutParams(lp);
tButt.setText(tagsArray.get(i));
tButt.setTypeface(Configurations.osItalic); tButt.setTextColor(Color.parseColor("#777777")); tButt.setBackgroundColor(Color.parseColor("#00000000"));
tButt.setTextSize(10);
tButt.setAllCaps(false);
tButt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String tag = tButt.getText().toString();
Log.i(Configurations.TAG, "SELECTED TAG: " + tag);
}});
// Add button to the layout
tagsLayout.addView(tButt);
}// ./For loop
}// ./ If
以上是关于在ListView单元格中重复数组元素会发出解析服务器的主要内容,如果未能解决你的问题,请参考以下文章
在 HTML 单元格中使用 HTML 解析 Python 正则表达式 [重复]