2015-02-26 2 views
-1

Я вырезал весь жир из своей проблемы. Может ли кто-нибудь сказать мне, почему список не обновляется с новыми значениями? Я пробовал все команды обновления, возможно, что-то мне не хватает?Почему мой список не обновляется?

public class DropboxFragment extends ListFragment { 

String[] values; 
ArrayAdapter<String> adapter; 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    values = new String[] { "Android", "iPhone", "WindowsMobile", 
      "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
      "Linux", "OS/2" }; 

    adapter = new ArrayAdapter<String>(getActivity(), 
      android.R.layout.simple_list_item_1, values); 

    setListAdapter(adapter); 

} 


@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 

    values = new String[] { "IT", "WORKED"}; 
    l.invalidateViews(); 
    adapter.notifyDataSetChanged(); 
    l.refreshDrawableState(); 
} 

} 

ответ

3

Вместо notifyDataChanged попытаться инициализировать ArrayAdapter с новыми значениями

+0

Благодаря человеку, это сработало! Так оно и должно быть сделано? – Ben

+2

@Ben: Ну, вы можете обновить существующий адаптер новыми данными. Это «то, как это должно быть сделано». Сейчас ваш код ничего не меняет внутри адаптера. Если вы не хотите обновлять существующий экземпляр адаптера, вам необходимо заменить существующий экземпляр адаптера. – CommonsWare

+0

Прохладный. Я попробовал values ​​= new String [] {"IT", "WORKED"}; adapter.clear(); adapter.addAll (значения); но получил java.lang.UnsupportedOperationException Должен ли я добавить их все отдельно? – Ben

1

Ну ... Вы не передавая новые строки к адаптеру, вы просто создать новый массив.

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

Попробуйте вместо этого:

values = new String[] { "IT", "WORKED"}; 
adapter = new ArrayAdapter<String>(getActivity(), 
     android.R.layout.simple_list_item_1, values); 
setListAdapter(adapter); 
+0

Спасибо человеку, он работает :) – Ben

0

values чейнинга в onListItemClick не меняет адаптер списка. Вам необходимо взять данное представление, найти нужное текстовое изображение и соответствующим образом изменить его текст.

public void onListItemClick(ListView l, View v, int position, long id) { 
    TextView tv = (TextView)v; // assuming that the only view created with the ArrayAdapter is a text view 
    tv.setText("new text"); 
} 
0

необходимо добавить, что: notifyDataSetChanged()

setListAdapter(adapter); 
adapter.notifyDataSetChanged(); 
+0

OP уже назвал этот метод. Проблема заключается в том, что список поддерживается за пределами адаптера. – 2Dee

Смежные вопросы