gpt4 book ai didi

android - ListView 在 notifyDataSetChanged 之后不会直观地更新其内容

转载 作者:太空狗 更新时间:2023-10-29 13:30:14 26 4
gpt4 key购买 nike

我有一个设置为 ListView 的静态项目数组,我可能会从另一个 Activity 修改它(向其中添加更多项目)。所以当我回到第一个 Activity 时,我必须用新项目刷新 ListView 的内容。

我通过以下方式做到这一点:onStart() 方法中的 adapter.notifyDataSetChanged(),当然要验证我是否必须这样做。

问题是,只有当我稍微滚动列表时,我才看到我的 ListView 发生了变化。

可能是什么问题?

语言:解决方案是在更改 Activity 之前设置 listview.invalidateViews(),当我返回第一个 Activity 时,通知适配器结束它的目的。

LE @vorrtex:

public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {
convertView = inflater.inflate(row, parent, false);
}


TextView tvAuthor = (TextView) ViewHolder.get(convertView, R.id.authorText);
TextView tvDate = (TextView) ViewHolder.get(convertView,R.id.dateText);
TextView tvCategory = (TextView) ViewHolder.get(convertView,R.id.categoryText);
TextView tvTitle = (TextView) ViewHolder.get(convertView,R.id.titleText);
TextView tvContent = (TextView) ViewHolder.get(convertView,R.id.contentText);
TextView tvNoComment = (TextView) ViewHolder.get(convertView,R.id.noComments);
WebView sv_banner = (WebView) ViewHolder.get(convertView,R.id.wv_imageBanner);

objBean = items.get(position);


sv_banner.getSettings().setJavaScriptEnabled(true);
sv_banner.getSettings()
.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
sv_banner.getSettings().setLightTouchEnabled(true);
sv_banner.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
sv_banner.getSettings().setPluginState(WebSettings.PluginState.ON);


if ((position + 1) % 3 == 0) {
if (sv_banner != null && null != objBean.getBanner_img_url() && objBean.getBanner_img_url().trim()
.length() > 0) {
sv_banner.setVisibility(View.VISIBLE);
sv_banner.loadUrl(objBean.getBanner_img_url().toString());
sv_banner.setFocusable(false);
}
} else {
sv_banner.setVisibility(View.GONE);
}


sv_banner.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(objBean.getBanner_url().toString()));
activity.startActivity(intent);
return true;
}
return false;
}
});

if (tvAuthor != null && null != objBean.getAuthor()
&& objBean.getAuthor().trim().length() > 0) {
tvAuthor.setText(Html.fromHtml(objBean.getAuthor()));
}

if (tvNoComment != null && null != objBean.getNoComments()
&& objBean.getNoComments().trim().length() > 0) {
int nrComent = Integer.valueOf(objBean.getNoComments());

if (nrComent == 0) {
tvNoComment.setText("");
} else {
tvNoComment.setText(Html.fromHtml(objBean.getNoComments()) + " comments");
}
}


if (tvDate != null && 0 != objBean.getPost_date()
&& objBean.getPost_date() > 0) {
tvDate.setText(Html.fromHtml(String.valueOf(dateFormat.format(objBean.getPost_date()))));
}

if (tvCategory != null && null != objBean.getCategory()
&& objBean.getCategory().trim().length() > 0) {
tvCategory.setText(Html.fromHtml(objBean.getCategory()).toString());
}

if (tvTitle != null && null != objBean.getTitle()
&& objBean.getTitle().trim().length() > 0) {
tvTitle.setText(Html.fromHtml(objBean.getTitle()).toString());
}

if (tvContent != null && null != objBean.getContent()
&& objBean.getContent().trim().length() > 0) {
String miniText = html2text(objBean.getContent());
Log.i("Content", "MiniText = " + miniText);
if (miniText.length() < 150) {
String finalMiniText = miniText.substring(0, miniText.length());
tvContent.setText(finalMiniText + "...");
} else {
String finalMiniText = miniText.substring(0, 150);
tvContent.setText(finalMiniText + "...");
}
}


if (position == 0) {

RelativeLayout child = (RelativeLayout) convertView.findViewById(R.id.layoutNewsForex);
child.setBackgroundResource(R.drawable.list_shape_corners);
RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams) child.getLayoutParams();
head_params.setMargins(18, 18, 18, 0); //substitute parameters for left, top, right, bottom
child.setLayoutParams(head_params);

} else {
RelativeLayout child = (RelativeLayout) convertView.findViewById(R.id.layoutNewsForex);
child.setBackgroundColor(Color.parseColor("#ebebeb"));
RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams) child.getLayoutParams();
head_params.setMargins(18, 0, 18, 0); //substitute parameters for left, top, right, bottom
child.setLayoutParams(head_params);
}


return convertView;

}

附言。此适配器正在扩展 ArrayAdapter。

最佳答案

解决方案是在更改 Activity 之前设置 listview.invalidateViews(),当我返回到第一个 Activity 时,通知适配器结束它的目的。

关于android - ListView 在 notifyDataSetChanged 之后不会直观地更新其内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16436542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com