Когда я смахиваю вверх, чтобы обновить свой ListView, я выполняю щелчок с помощью performClick (), но колесо зависает до тех пор, пока не будет выполнено все, что находится под onClickListener.
btini.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Code here
refreshlistmain.setRefreshing(false);
refreshlistmain.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
btini.performClick();
}
}
);
Поскольку код onClick () довольно длинный, колесо остается замороженным на пару секунд, прежде чем исчезнет.
Как мне это исправить?
Это неправильное расположение кода. Это рекурсивный вызов. При каждом щелчке будет регистрироваться новый SwipeRefreshLayout.OnRefreshListener. Просто используйте его, как показано ниже. Выполните длительную задачу и, наконец, позвоните в refreshlistmain.setRefreshing(false);. Если длительная задача находится в рабочем потоке, вам нужно дождаться ее завершения.
btini.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do stuff
refreshlistmain.setRefreshing(false);
}
});
refreshlistmain.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
btini.performClick();
}
}
);
Это потому, что у вас есть длинная задача в потоке пользовательского интерфейса. Он не заморозит не только SwipeToRefreshLayout, но и любую анимацию или ProgressBar, которые у вас есть (есть).
Решение
Поместите свою задачу (которую вы выполняете после нажатия кнопки) в AsyncTask или другом потоке. Что будет работать асинхронно.
спасибо за ответ но у меня все еще есть проблема