정적 인 배열의 항목이 목록보기로 설정되어 있으므로 다른 활동 (일부 항목을 추가)에서 수정할 수 있습니다. 따라서 첫 번째 활동으로 되돌아 가면 목록보기의 내용을 새 항목으로 새로 고쳐야합니다.ListView는 시각적으로 내용을 시각적으로 업데이트하지 않습니다. notifyDataSetChanged
나는 adapter.notifyDataSetChanged()
onStart()
방법으로, 물론 그렇게해야하는지 확인합니다.
문제는 목록을 조금 스크롤 할 때만 변경된 목록보기입니다.
무엇이 문제 일 수 있습니까?
LE는 : 솔루션 활동을 변경하기 전에 listview.invalidateViews()를 설정하고 있었고, 난 처음 활동으로 돌아가로, 어댑터를 통지하는 것은 그것의 목적을 종료합니다.
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;
}
PS. 이 어댑터는 ArrayAdapter를 확장하고 있습니다.
메서드가 작동해야합니다. 'getView' 메소드에 어떤 코드가 있습니까? – vorrtex
나는 그것을 편집하고 요청 된 코드를 추가했지만, 내가 말했듯이, 나는 listview.invalidateViews()를 사용하여 그것을 작동하게 만들었다. 추가 할 정보가 더있는 경우, 나는 모두 귀가 있습니다. – DoruAdryan
getView 메소드에는 아무런 문제가 없으므로 문제가되지 않습니다. 비록 내가'ArrayList'에 그것들을 추가하는 대신에'ArrayAdapter'의'add' 메쏘드를 사용하려고 노력할 것입니다. – vorrtex