Я реализовал SwipeRefreshLayout, и в основном он работает нормально. https://developer.android.com/training/swipe/add- swipe-interface.html

Я сталкиваюсь со странной проблемой, когда вы переходите в конец списка, а когда пытаетесь прокрутить его вверх, обновляется SwipeRefreshLayout.

Это не то, что мне нужно. Мне нужно просто прокрутить список до начала, а не обновлять ListView.

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

Пожалуйста помоги.

<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swiperefresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<LinearLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:orientation="vertical"
    >

    <SearchView
        android:id="@+id/editSearch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:iconifiedByDefault="false"
        android:queryHint="Input the number"
        />
<ListView
    android:paddingTop="5dp"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"   />

</LinearLayout>

</android.support.v4.widget.SwipeRefreshLayout>

И код

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_fragment_two, container, false);

        swiperefresh = (SwipeRefreshLayout) view.findViewById(R.id.swiperefresh);
        swiperefresh.setColorScheme(R.color.colorPrimary, R.color.colorAccent, R.color.colorPrimaryDark, R.color.colorPrimary);
        swiperefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {

            @Override
            public void onRefresh() {
                swiperefresh.setRefreshing(true);
                Log.d("Swipe", "Refreshing Number");                 
                // Get data from WebAPI or database cache
            }
        });

        return view;
    }
2
Developer 3 Янв 2018 в 05:39

2 ответа

Лучший ответ

Ну ... Наконец-то я нашел здесь решение Прокрутка вверх не работает с SwipeRefreshLayout в Listview

Так что мой макет менять не собираюсь, но код да.

Мы должны сделать следующее

  1. Реализуйте AbsListView.OnScrollListener как общедоступный class FragmentTwo extends ListFragment implements SearchView.OnQueryTextListener, AbsListView.OnScrollListener

  2. Добавьте два метода реализованного интерфейса AbsListView.OnScrollListener как здесь

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

            swiperefresh.setEnabled(firstVisibleItem == 0);
}

И ключ здесь
swiperefresh.setEnabled(firstVisibleItem == 0);

реализует OnScrollListener внутри listFragment

2
Developer 3 Янв 2018 в 05:05

Эта библиотека позволяет вам выбирать между подтягиванием и опусканием:

https://github.com/chrisbanes/Android-PullToRefresh

Потяните вверх, чтобы обновить По умолчанию для этой библиотеки установлено значение «Потяните вниз для обновления», но если вы хотите разрешить «Подтягивание вверх для обновления», вы можете это сделать. Вы даже можете настроить вид, чтобы включить как подтягивание вверх, так и опускание вниз, используя параметр «оба». См. Страницу "Настройка" для получения дополнительной информации о том, как это установить.

Я не думаю, что SwipeRefreshLayout позволяет это.

1
Mujtaba Mahmood 3 Янв 2018 в 02:55