2012-06-04 128 views
4

我嘗試製作一個微調控制器,其中dropdownview中的第一項沒有單選按鈕。我重寫了arrayadapter的視圖類型,以確保在微調控件中有兩個不同的視圖,並且視圖不會被錯誤的項目回收。然後我重寫arrayadapter的getDropDownView以從第一個項目刪除單選按鈕。這是可行的,但所選項目不顯示單選按鈕。我想我不需要setCheckMarkDrawable(android.R.drawable.btn_radio),因爲它應該總是在那裏,但事實並非如此。有任何想法嗎?謝謝!微調控制器爲每個項目提供不同視圖

 @Override 
     public int getViewTypeCount() 
     { 
      return 2; 
     } 

     @Override 
     public int getItemViewType(int position) 
     { 
      if (position == 0) 
       return 0; 
      else 
       return 1; 
     } 

     @Override 
     public View getDropDownView(int position, View convertView, android.view.ViewGroup parent) 
     { 
      if (position == 0) 
      { 
       View vw = super.getDropDownView(position, convertView, parent); 
       CheckedTextView tv = (CheckedTextView) vw; 
       if (tv != null) 
       { 
        tv.setCheckMarkDrawable(null); 
        tv.setTextColor(Color.GRAY); 
        return tv; 
       } 
       return vw; 
      } else 
      { 
       View vw = super.getDropDownView(position, convertView, parent); 
       CheckedTextView tv = (CheckedTextView) vw; 
       if (tv != null) 
       { 
        tv.setCheckMarkDrawable(android.R.drawable.btn_radio); 
        tv.setTextColor(Color.BLACK); 
        return tv; 
       } 
       return vw; 
      } 
     } 

回答

0

我認爲getItemViewType和getViewTypeCount在使用ArrayAdapter和Spinner時沒有被調用。一種解決方案是不回收convertView並假定它始終爲空。但是你在LogCat中遇到了一個滯後的微調和大量的GC調用。

3

我有同樣的問題。和是的,因爲pzagor2表示 - 微調不支持下拉列表(getDropDownView)多佈局回收。它只是不調用getViewTypeCount和getItemViewType。這是一個問題 - #17128

但它仍然調用getView的這些方法,用於顯示當前的微調器項目和檢測微調器寬度。

解決方法:您可以檢查提供的convertView是否有正確的類型,如果不正確,請不要使用它。這在某些情況下會有所幫助,例如,當您有兩種類型,一種類型的使用頻率低於另一種時。

0

由於視圖回收不適用於Spinner,因此如果您有多個視圖,請勿使用Spinner。取而代之的是使用一個TextView作爲Spinner,並在onClick打開顯示下拉菜單的自定義對話框。

<TextView android:id="@+id/labels_spinner" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     style="@style/Base.Widget.AppCompat.Spinner.Underlined"/> 


@OnClick(R.id.labels_spinner) 
public void onSpinnerClick(View view) { 
    // Open dropdown dialog 
} 
相關問題