2010-09-24 16 views
14

ben gibi kurulumu yapıldıktan bir ToggleButton'a var:Android'in altındaki dinamik ToggleButton metnini nasıl çalışırım?

final ToggleButton filterButton = (ToggleButton) findViewById(R.id.filterTags); 
     filterButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       if (filterButton.isChecked()) { 
        // pop up the list of tags so the user can choose which to filter by 
        // once one is chosen, the spinner will be updated appropriately 
        showDialog(DIALOG_TAGS); 
       } else { 
        // going unpressed, set the the spinner list to everything 
        updateSpinner(db.itemNames()); 
       } 
      } 
     }); 

ve diyalog gibi görünür:

case DIALOG_TAGS: 
     final String[] tagNames = db.tagNamesInUse(); 
     dialog = new AlertDialog.Builder(this) 
      .setItems(tagNames, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         updateSpinner(db.getItemNamesForTag(tagNames[which])); 
         final ToggleButton filterButton = (ToggleButton) findViewById(R.id.filterTags); 
         filterButton.setTextOn(tagNames[which]); 
         dialog.dismiss(); 
        } 
       }) 
       .setNegativeButton("Cancel", UITools.getDialogCancellingListener()) 
      .create(); 

fikirdir: ToggleButton açıksa, eğer tek açılır etiketlerin listesi olan liste listesi iletişim kutusu. Bir etiket seçildiğinde, ToggleButton için yeni textOn olur. ToggleButton kapalıysa (unChecked), metin statik TextOff'a döner.

Sorun şu ki: diyalog giderildikten sonra düğme yeniden çizilmez. Gösterilen metin hala textOn'in önceki değeridir.

Yeniden çizmeyi nasıl zorlayabilirim? filterButton.postInvalidate();'u denedim, ancak bu yardımcı olmadı.

cevap

16

Çözüldü! Kaynağın ToggleButton'a mantıklı okunması, setTextOn() ve setTextOff() öğesinin, TextView bitlerini güncelleyen (private) syncTextState'e neden olmadığını gösterirken, setChecked() 'un değerini çağırdığını gösterir. Bu yüzden hile şudur: Oldukça güzel bir şekilde çalışmıştı. Açık kaynak için yay! Bu çalışmalar

+0

+1. Cevabınızı kabul etmelisiniz – ohhorob

+0

Awesome! Teşekkürler! :) – zleao

+0

SyncTextState'in çağrılmadığı konusunda kesinlikle haklısınız. Ancak, metni değiştirmek için doğrudan setText (tagNames [hang]) 'ı arayabilirsiniz. – Dandalf

İlgili konular