2010-01-29 15 views
8

Öğe listesini dinamik hale getirmeye çalışıyorum, bu yüzden çalışmaya çalışma zamanında ekleyebilirim, ancak hiçbir fikrim yok. CharSeqence, dinamik değildir ve adaptör seçeneğini nasıl kullanacağım hakkında bir ipucu, kodumun dinamik olmasını nasıl değiştirebilirim? Eğer onCreateDialog() yılında iletişim oluşturursanıztelsiz düğmeleri olan dinamik uyarı bilgisi

private void alertDialogLoadFile() { 

    AlertDialog.Builder alert = new AlertDialog.Builder(this); 
    alert.setTitle("Choose:"); 
    CharSequence[] items = { "moshe", "yosi", "ee" }; 
    alert.setSingleChoiceItems(m_items , -1, new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int item){ 
      /* User clicked on a radio button do some stuff */ 
     } 
    }); 

    alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int id) { 
    } 
    }); 

    alert.setNegativeButton("No", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int id) { 
      dialog.cancel(); 
     } 
    }); 


    AlertDialog ad = alert.create(); 
    ad.show(); 

} 
+0

Dinamik ile ne demek istiyorsun? Seçimlerin çalışma zamanında değişken olmasını ister misiniz? Seçimlerin ne olduğuna kim karar veriyor? –

+0

Çalışma zamanı üzerinde oluşturulmasını istiyorum, bu seçenekler bazı veritabanlarından geri alındığı için, daha önce hangi uyarı iletisinde bulunacağını seçemezsiniz. – rayman

cevap

1

, bunu kullanıcıya görüntülenen önce tercihleri ​​değiştirmek için onPrepareDialog() uygulayabilir. Örneğin:

protected void onPrepareDialog(int id, Dialog dialog) {  
    if (id == YOUR_DIALOG_ID) { 

     // Create new adapter 
     ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(); 
     adapter.add("new items ..."); 
     ... 

     // Use the new adapter 
     AlertDialog alert = (AlertDialog) dialog; 
     alert.getListView().setAdapter(adapter); 
    } 
} 

Ayrıca iletişim kutusundan adaptör almak (ve doğru türe onu döküm) ve ekleyerek veya uygun gördüğünüz gibi öğeleri kaldırarak aynı etkiyi alabilir. Muhtemelen yeni bir bağdaştırıcı oluşturmaya yöneliyorum, çünkü getListAdapter() değerini yanlış türden yazmak için endişelenmenize gerek kalmayacak. Ancak, bağdaştırıcıyı yeniden kullanmak muhtemelen biraz daha fazla bellek etkin.

+0

ArrayAdapter adapter = new ArrayAdapter (); bunu bu şekilde kullanamazsınız, eksik kurucu yoktur. – rayman

1
@Override 
protected void onPrepareDialog(int id, Dialog dialog) { 

    super.onPrepareDialog(id, dialog); 

    if (id == DIALOG_PHONE_SELECT) { 

     ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(CallBack.this, android.R.layout.select_dialog_item, availablePhones); 
     ((AlertDialog) dialog).getListView().setAdapter(adapter); 

    } 
} 
siz "android.R.layout.select_dialog_item" kullanabilirsiniz

- Bir Oluşturucu kullanıyorsanız Tamam düğmesine

2

Tamam düğmesi olmayan iletişim veya "android.R.layout.select_dialog_singlechoice", denemek this:

ArrayAdapter<CharSequence> itensAdapter = new ArrayAdapter<CharSequence>(); 
itensAdapter.add("whatever"); 

builder = new AlertDialog.Builder(CalculatorActivity.this); 
builder.setTitle("Escolha uma opção"); 
builder.setAdapter(itensAdapter, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
       removeDialog(DIALOG_AREA); 
     } 
    }); 
dialog = builder.create(); 
+0

ArrayAdapter için varsayılan kurucu yoktur, bu nedenle aşağıdaki gibi olmalıdır: ArrayAdapter itensAdapter = new ArrayAdapter (this, R.layout.list); – EtienneSky

İlgili konular