0

Я пытаюсь удалить индикатор прогресса после загрузки моих данных в фрагмент, содержащий ListView. Вот мой обработчик завершения:Не удается удалить или скрыть представление в Android

getActivity().runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     dataSource = (ArrayList<Map<String, Object>>) task.getResult(); 
     PostAdapter adapter = new PostAdapter(getActivity(), dataSource); 
     ListView list = (ListView) rootView.findViewById(R.id.listView); 
     list.setAdapter(adapter); 
     View indicator = getActivity().findViewById(R.id.indicator); 
     RelativeLayout layout = (RelativeLayout) getActivity().findViewById(R.id.layout); 
     layout.removeView(indicator); 
    } 
}); 

Последние 3 строки кода являются соответствующей частью. Все называется правильно, ничего нет и т. Д. В отладке все работает отлично. Адаптер также работает правильно, заполняя мой список, но индикатор все еще находится на экране. Я также попытался установить его видимость на GONE или HIDDEN, но они также не скрывают его. Я видел Android - Can't hide progress bar, но ответы включают setEmptyView(), который я не использую в любом случае. Я использую тот же фрагмент (разумеется, другой экземпляр) на другой вкладке, и он работает правильно.

Вот мой файл макета:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="0dp" 
    android:background="#ffffffff" 
    android:id="@+id/layout"> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/listView" 
     android:layout_margin="0dp" 
     android:padding="0dp" /> 

    <ProgressBar 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/indicator" 
     android:indeterminate="true" 
     android:layout_centerInParent="true" /> 
</RelativeLayout> 

Что я делаю неправильно?

+0

Хорошо, так, Вы отображения прогресса бар, чтобы опубликовать достигнутый прогресс, правильно? и вы хотите скрыть это, но вы не можете. Правильно ли я это понимаю? (: –

+0

Я столкнулся с этой проблемой. У вас было одно имя «R.id.indicator» для разных фрагментов? Если да, можете ли вы попытаться переименовать другое имя для другого «R.id.indicator»? Пожалуйста, поделитесь результатом. –

+0

@LittleChild да, точно. –

ответ

1

Я выяснил проблему (спасибо всем комментаторам). Я вызывал методы активности для поиска и удаления представления. Проблема в том, что у меня есть несколько экземпляров одного и того же фрагмента в одной и той же активности, на разных вкладках. Я использовал корневой вид моего фрагмента, чтобы найти и удалить индикатор, а не активность, и он работал.

1

Изменить коды трех последних строк в onClick(...) как:

View indicator = (ProgressBar)rootView.findViewById(R.id.indicator); 

и использование:

indicator.setVisibility(ProgressBar.GONE);  

или коды:

+0

Я не видел, что вы ответили на одно и то же решение. – Xcihnegn