Android ListView / ListFragment заставляет одну строку в строке (код Java) - PullRequest
3 голосов
/ 20 марта 2012

Кажется, я не могу найти решения этой предположительно простой проблемы / ошибки, поэтому вот она:

ListFragment типа (android.R.layout.simple_list_item_checked), который при нажатии загружает другие фрагменты и выполняет другую работу.

Проблема в том, что строки в ListFragment, которые находятся вне поля зрения, «переносятся» на следующую строку без видимой причины при прокрутке обратно в представление. Лучше проиллюстрировать фотографиями ниже:


Фото 1: Нормальное состояние

1-normal


Фото 2. Список прокручивается вниз - все по-прежнему работает нормально (Lamborghini вне поля зрения) 2-normal-end


Фото 3: Однако, когда я выбрал Porsche и прокрутил вниз, текст «Мустанга» был поврежден

4-error1


Фото 4. Так же, как и «Lamborghini» при прокрутке назад после некоторого случайного нажатия

5-error2


Коды, которые я использовал для создания списка, довольно просты:

 @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        getListView().setHorizontalFadingEdgeEnabled(true);
        getListView().setVerticalFadingEdgeEnabled(true);
        getListView().setFastScrollEnabled(true);
        carsTitleAdapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_checked, CarModels.Models);
        setListAdapter(carsTitleAdapter);

Строка в CarModels.class

   public static final String[] Models = {
    "Porsche",
    "Lamborghini",
    "Ferrari",
    "McLaren",
    "Aston Martin",
    "Jaguar",
    "Audi",
    "Mustang",        
};

Я пытался вызвать notifyDataSetChanged () в конце onListItemClick (), надеясь, что это обновит список, но проблема все еще сохраняется. Любые возможные решения этого? Спасибо!

PS: я запускаю его на Galaxy Tab 10.1, Honeycomb 3.1 с support-library-v4. Может ли это быть ошибка в этой сборке?

1 Ответ

2 голосов
/ 21 марта 2012

Я решил проблему, переопределив onCreateView и передав файл макета, который содержит ListView с android: id = "@android: id / list" в представлении, возвращаемом методом.

        @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        return inflater.inflate(R.layout.list_fragment_layout, null);
    }

list_fragment_layout.xml:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>
...