3

我正在使用一個ListView的Android應用程序,其中每一行都包含一個文本視圖和一個進度條。除非用戶必須滾動長列表,否則事情將順利進行。滾動瀏覽ListBar的ProgressBars

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:

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); 
    } 
} 

看來這個問題涉及到:因爲進度開始得到回收的進度的行爲

myProgressBar = wrapper.getProgressBar(); 

。但是,我希望它有自己的行爲。

減輕這種情況的最佳方法是什麼?謝謝。

回答

0

您可能需要每次膨脹佈局,而不是重新使用傳入的convertView。除非您有很多行,否則這應該不是問題。

0

我不得不實現一個類似的功能,這就是我所做的。我採取了以下外getview

  • OnTouchListener - 聽搜索欄的觸摸事件
  • OnKeyListener - 聽DPAD和搜索條

我設置這些偵聽器seekbars從getView trakball事件

每當收聽者被調用時,我會找到查找父母,然後從父級到文本查看。

所以現在我有我必須更新的textview和seekbar。我需要做的就是設置數組中的文本。

這裏有一些代碼可以幫助你。

私人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; 
    } 
};