UPDATE: Я думал, что он работает правильно. Но после некоторой проблемы с тестированием все еще существует * sniff *Когда фрагмент фрагмента с SwipeRefreshLayout во время обновления, фрагмент замерзает, но на самом деле все еще работает
Затем я сделал более простую версию, чтобы узнать, что именно происходит, и я узнаю, что освежающий фрагмент, который должен был быть отсоединен, все же остался там. Или точно, вид старого фрагмента остался там, поверх более новый фрагмент. Поскольку фон RecyclerView моего оригинального приложения не прозрачен, так получилось, что я сказал раньше.
КОНЕЦ UPDATE
У меня есть MainActivity
с планировкой так:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout"
android:layout_width="match_parent" android:layout_height="match_parent">
<!-- As the main content view, the view below consumes the entire
space available using match_parent in both dimensions. -->
<FrameLayout android:id="@+id/container" android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- android:layout_gravity="start" tells DrawerLayout to treat
this as a sliding drawer on the left side for left-to-right
languages and on the right side for right-to-left languages.
If you're not building against API 17 or higher, use
android:layout_gravity="left" instead. -->
<!-- The drawer is given a fixed width in dp and extends the full height of
the container. -->
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent"
android:layout_gravity="start" tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>
фрагмент ContentView
использовать для заполнения @id/container
сконфигурирован как:
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contentView"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/tweet_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/grey_300"/>
</android.support.v4.widget.SwipeRefreshLayout>
А вот onCreateView()
из ContentView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View inflatedView = inflater.inflate(R.layout.fragment_content, container, false);
mRecyclerView = (RecyclerView) inflatedView.findViewById(R.id.tweet_list);
mRecyclerView.setHasFixedSize(false);
mLinearLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
mRecyclerView.setLayoutManager(mLinearLayoutManager);
mTweetList = new ArrayList<Tweet>;
mAdapter = new TweetAdapter(mTweetList);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mSwipeRefreshLayout = (SwipeRefreshLayout) inflatedView.findViewById(R.id.contentView);
mSwipeRefreshLayout.setOnRefreshListener(
...
);
return inflatedView;
}
Затем в MainActivity
переключить содержимое для отображения при переключении другого ContentView
. Все выглядит хорошо, кроме одного: когда я переключаю ContentView
фрагменты ВО ВРЕМЯ обновления в навигационном ящике, тогда содержимое зависает. Но на самом деле все работает как обычно, если вы не видите его.
Нормальный, вы хотите обновить, & пока вы меняете весь список, тогда, когда обновление завершается, оно пытается перезагрузить данные, которые были изменены. Вы должны блокировать салфетки при освежении. – Sidd
Ну, похоже, что это ошибка Google ... После обновления до AppCompat v21.0.2, вся боль прошла XD. Спасибо в любом случае <3 – zlm2012