2013-05-08 67 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 2013-05-08 10:10:43

+0

我编辑它并添加了所需的代码,但正如我所说的,我使用listview.invalidateViews()设法使其工作。如果你有更多的信息可以添加,我全都是耳朵:) – DoruAdryan 2013-05-08 11:31:54

+0

getView方法没有问题,所以奇怪的是它不起作用。虽然我会尝试使用ArrayAdapter的add方法,而不是将它们添加到ArrayList中。 – vorrtex 2013-05-08 13:09:56

回答

2

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

相关问题