【问题标题】:listview error when scrolling down向下滚动时出现列表视图错误
【发布时间】:2013-05-13 04:53:48
【问题描述】:

我在列表视图中有按钮和进度条(不可见)。当按钮点击它应该消失并且进度条应该可见并开始运行(从网络服务器下载),当它完成时运行按钮应该再次出现。现在,当我单击第一项的按钮时,进度条会运行,但是如果我向下滚动直到第一项离开屏幕,我会看到进度条与列表视图的最后一项上的第一项的进度条同时运行。如果我向上滚动第一项的进度条运行正常。如果我单击第二个项目,列表视图的倒数第二个项目也会发生同样的情况。问题是什么,我该如何解决?请帮忙!!!

【问题讨论】:

  • 请贴出相关源码。
  • 请分享您的代码
  • 你正面临混淆你的记录?

标签: android android-listview


【解决方案1】:

您必须记住正在下载的位置、进度(如果您没有显示不确定的条),并在适配器的 getView 中更新这些值。这实际上很快变得非常复杂 - 如果您想在下载完成后再次更新视图,您必须对列表视图的工作方式和它们回收视图的方式进行大量非常仔细的编码,或者您必须更新整个视图文件下载完成或更新进度的listview,可能会导致闪烁。

【讨论】:

    【解决方案2】:

    选择 viewHolder 类的概念,它保持 listview 的状态,直到过程完成。 Urs 的主要问题是,当您滚动列表视图时,视图会刷新,只有它进入初始状态。

    Class ViewHolder
    {
    TextView mtext;
    Button mButton;
    ProgressBar mBar;
    }
    

    在getview方法中 初始化viewholder类

    链接:

    http://developer.android.com/training/improving-layouts/smooth-scrolling.html http://developer.android.com/training/contacts-provider/display-contact-badge.html

    【讨论】:

      【解决方案3】:

      尝试这样的事情......我正在使用不同的视图来下载 pdf,但你可以使用这个概念

          Holder holder;
          class Holder {
              TextView txt_pdfname;
              Button btn_download;
              ImageView img_pdficon;
          }
      
          @Override
          public View getView(final int arg0, View arg1, ViewGroup arg2) {
      
      
              // position=arg0;
              View v=arg1;
              if (v == null) {
                   holder = new Holder();
                  v = layoutInflater.inflate(R.layout.cell_document, arg2,false);
                  holder.txt_pdfname = (TextView) v.findViewById(R.id.txt_pdfname);
                  holder.img_pdficon=(ImageView)v.findViewById(R.id.img_pdficon);
                  holder.btn_download = (Button) v.findViewById(R.id.btn_download);
                  v.setTag(holder);
      
              } else{
                  holder = (Holder) v.getTag();
      
              }
              File pdfFile=new File(Environment.getExternalStorageDirectory().toString()+"/fpapdf/"+(pdfUrl[arg0].substring(pdfUrl[arg0].lastIndexOf('/')+1)));
              if(pdfFile.exists()){
                  holder.btn_download.setVisibility(View.INVISIBLE);
      
              }else
                  holder.btn_download.setVisibility(View.VISIBLE);
              holder.txt_pdfname.setText(this.pdfArray[arg0]);
              holder.img_pdficon.setImageResource(pdfImage[arg0]);
      
              holder.btn_download.setOnClickListener(new OnClickListener() {
      
                  @Override
                  public void onClick(View v) {
                      // YOUR CODE HERE
      
                  }
      
              });
      
              return v;
          }
      

      欲了解更多信息,请参阅this by Romain

      【讨论】:

      • 这正是我所做的。但我仍然面临这个问题。
      【解决方案4】:

      只需将您的 getView 替换为这个,我将删除 if(view==null) 通过这个您每次都会获得一个新视图而不是来自标签的新视图

      @Override
      public View getView(final int position, View convertView, ViewGroup parent) {   
      final ArrayList<String> array=JournalArray.get(position);
      final ViewHolder view;
      LayoutInflater inflator = activity.getLayoutInflater();
      
          view = new ViewHolder();
          convertView = inflator.inflate(R.layout.familylist_item, null);
          view.progress=(ProgressBar)convertView.findViewById(R.id.downprogress);
          view.txtViewTitle = (TextView) convertView.findViewById(R.id.text);
          view.imgViewFlag = (ImageView) convertView.findViewById(R.id.imageView1);
          view.imgAR=(Button)convertView.findViewById(R.id.imageAR);
          view.imgAR.setTag(view);
          view.imgDown=(Button)convertView.findViewById(R.id.imageDown);
          view.imgDown.setTag(view);
          view.imgPDF=(Button)convertView.findViewById(R.id.imagePDF);
          view.imgPDF.setTag(view);
          view.progress=(ProgressBar)convertView.findViewById(R.id.downprogress);
          view.btnDel=(Button)convertView.findViewById(R.id.btnDel);
          view.btnDel.setTag(view);
          convertView.setTag(view);
      }
      

      【讨论】:

      • 重装后你试过了吗?
      猜你喜欢
      • 2012-01-23
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 2018-08-13
      相关资源
      最近更新 更多