3

私は、各行がテキストビューと進行状況バーで構成されているListViewを利用するAndroidアプリケーションで作業しています。ユーザーが長いリストをスクロールしなければ、スムーズに動作しません。ProgressBarsのListViewをスクロール

ProgressBarsは、現在画面に表示されていない他のProgressBarsの進行を開始します。

これは、GetViewの実装に起因する一般的な問題であると私は理解していますが、ProgressBarsで実行するのが最善の方法です。

getViewメソッド:

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

     View row = convertView; 
     ViewWrapper wrapper; 
     ProgressBar myProgressBar; 
     int initProgress = myData.get(position).getProgress(); 

     if (row == null){ 
      LayoutInflater inflater = context.getLayoutInflater(); 
      row = inflater.inflate(R.layout.row, null); 

      wrapper = new ViewWrapper(row); 
      row.setTag(wrapper);  
     } 

     else{ 
      wrapper = (ViewWrapper)row.getTag(); 

     } 

     RowModel model = getModel(position);   
     wrapper.getPid().setText(model.toString()); 
     myProgressBar = wrapper.getProgressBar(); 
     myProgressBar.setProgress(initProgress); 
     myProgressBar.setMax(100); 

     myProgressBar.setTag(new Integer(position)); 

     return row; 
    } 

ViewWrapper:そのプログレスリサイクルプログレスバーの動作を取得し始めているため

myProgressBar = wrapper.getProgressBar(); 

public class ViewWrapper { 
    View base; 
    TextView pid = null; 
    ProgressBar pb= null; 

    ViewWrapper(View base){ 
     this.base = base; 
    } 

    TextView getPid(){ 
     if(pid == null){ 
      pid = (TextView)base.findViewById(R.id.pid); 
     } 

     return(pid); 
    } 

    ProgressBar getProgressBar(){ 
     if(pb== null){ 
      pb= (ProgressBar)base.findViewById(R.id.progressbar); 
     } 

     return(pb); 
    } 
} 

問題が関連すると思われます。しかし、私はそれがそれ自身の行動をしたい。

これを軽減するにはどうすればよいですか?ありがとう。

答えて

0

あなたは毎回レイアウトを膨らませ、渡されたconvertViewを再利用しないでください。たくさんの行がない限り問題にはなりません。

0

私はこれと同様の機能を実装しなければなりませんでした。

  • OnKeyListenerタッチイベントをシークバーに耳を傾ける - - DPADに耳を傾け、私はgetViewからseekbarsためにこれらのリスナーを設定
  • シークバーのためtrakballイベント私はgetview

    • 外次OnTouchListenerを実装しました

      リスナーが呼び出されるたびに、私はシークバーの親を見つけてから、を親からテキストビューにします。

      私は今更新する必要があるtextviewとシークバーを持っています。私がする必要があるのは、配列からテキストを設定することだけでした。

      ここにいくつかのコードがあります。

      プライベートOnTouchListener touchListener =新しいOnTouchListener(){

      @Override 
          public boolean onTouch(View v, MotionEvent event) { 
            View parent = (View) v.getParent(); 
            TextView textView = (TextView) parent 
              .findViewById(R.id.id_grade_tooltip); 
            if (textView == null) { 
            } else { 
             SeekBar seekBar = (SeekBar) v; 
             textView.setText(String.valueOf(seekBar.getProgress()) 
               + "%"); 
            } 
            return false; 
          } 
      }; 
      
    関連する問題