2010-09-23 3 views
0

Я использую пользовательский ListView с Title и Subtitle, где вы можете прочитать краткое описание предмета.Изменение динамических элементов в спискеView

Для каждого элемента в списке, я показываю AlertDialog, чтобы выбрать вариант (по-разному для каждого случая). Когда опция выбрана, я хочу изменить Subtitle для опции, выбранной пользователем.

Это то, что я пробовал:

listview.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     switch(position){ 
     case 0: 
     final CharSequence[] alertText1 = {"Area 1", "Area 2", "Area 3"}; 
     ventana.setTitle("Choose an Area"); 
     ventana.setItems(alertText1, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { 
        TextView subTitulo = (TextView) findViewById(R.id.subTitulo); 
        subTitulo.setText(alertText1[item]); 
      } 
     }); 
     ventana.show(); 
     break; 

    case 1: 
     final CharSequence[] alertText2 = {"1", "2", "3", "5", "10", "20", "60"}; 
     ventana.setTitle("Max. duration"); 
     ventana.setItems(alertText2, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { 
       TextView subTitulo = (TextView) findViewById(R.id.subTitulo); 
       subTitulo.setText(alertText2[item]); 
      } 
     }); 
     ventana.show(); 
     break; 

    case 2: 
     final CharSequence[] alertText3 = {"3", "5", "10", "20", "30", "60"}; 
     ventana.setTitle("Time between events"); 
     ventana.setItems(alertText3, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { 
       TextView subTitulo = (TextView) findViewById(R.id.subTitulo); 
       subTitulo.setText(alertText3[item]); 
      } 
     }); 
     ventana.show(); 
     break; 

Для первого элемента списка он прекрасно работает, когда я выбираю вариант, субтитры заменяются на этот вариант, но когда я делаю выбор в AlertDialog s других двух элементов, выбранная опция заменяет субтитры первого элемента!

Любая идея, как я могу это исправить?

ответ

3

Поскольку никто не ответил на вопрос, и я найти решение, им будет опубликовать его здесь, чтобы помочь другим людям, которые в конечном счете могут быть сталкиваются с той же проблемой или схожий: D

Я просто удалить TextView subTitulo = (TextView) findViewById(R.id.subTitulo); от каждого случай и добавить его перед запуском переключателя, но «принимать» на вид аргумента на функцию OnClick (типа окончательно, потому что затмение предупредил меня об этом: P): final TextView subTitulo = (TextView) view.findViewById(R.id.subTitulo);

код выглядит следующим образом:

listview.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

TextView subTitulo = (TextView) view.findViewById(R.id.subTitulo); 

       switch(position){ 

       case 0: final CharSequence[] alertText1 = {"Area 1", "Area 2", "Area 3"}; 
         ventana.setTitle("Choose an Area"); 
         ventana.setItems(alertText1, new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int item) { 

           subTitulo.setText(alertText1[item]); 
          } 
         }); 
         ventana.show(); 
          break; 


[...] 
+0

реальным ответом является использование лучшего адаптера для заполнения списка, а затем обновление адаптера при щелчке. –

+0

Можете ли вы объяснить себе немного больше? В этом коде listView уже заполнен. «ventana» определяется как AlertDialog.Builder, и проблема заключалась в изменении содержимого listView в зависимости от выбора alertDialog. Может быть, вы можете мне рассказать об этом адаптере? : D – Kitinz