2013-05-08 2 views
3

정적 인 배열의 항목이 목록보기로 설정되어 있으므로 다른 활동 (일부 항목을 추가)에서 수정할 수 있습니다. 따라서 첫 번째 활동으로 되돌아 가면 목록보기의 내용을 새 항목으로 새로 고쳐야합니다.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를 확장하고 있습니다.

+0

메서드가 작동해야합니다. 'getView' 메소드에 어떤 코드가 있습니까? – vorrtex

+0

나는 그것을 편집하고 요청 된 코드를 추가했지만, 내가 말했듯이, 나는 listview.invalidateViews()를 사용하여 그것을 작동하게 만들었다. 추가 할 정보가 더있는 경우, 나는 모두 귀가 있습니다. – DoruAdryan

+0

getView 메소드에는 아무런 문제가 없으므로 문제가되지 않습니다. 비록 내가'ArrayList'에 그것들을 추가하는 대신에'ArrayAdapter'의'add' 메쏘드를 사용하려고 노력할 것입니다. – vorrtex

답변

2

해결 방법 Activity를 변경하기 전에 listview.invalidateViews()를 설정하고 첫 번째 작업으로 돌아 가면 어댑터가이를 알리는 것을 알리는 것이 었습니다.

관련 문제