【发布时间】:2016-05-08 09:10:42
【问题描述】:
嗨,我有一个选项卡布局,它通过 viewpager 膨胀一堆片段每个片段实例化一堆视图一切正常,但是如果我刷过几个片段然后再刷回片段通过那里的生命周期会有一个问题分离和附加并设置其视图导致片段在其布局中加倍视图,
例如:片段显示 5 个视图,滑动一些片段并向后滑动相同的片段然后显示 10 个视图
我相信这是因为我在 onCreateView 中设置了所有内容,我试图将设置调用移动到 onViewCreated,这给了我一个不同的问题,片段和视图创建得很好,但是当你滑开然后返回时,视图消失了,并且控制台告诉我'没有附加适配器跳过布局',研究这个给我的印象是我需要将我的适配器调用移动到主线程,但我无法让它工作空指针无论我尝试什么有人能指出我正确的方向,
这是我的片段的主要部分
public class OneFragment extends Fragment{
public static List<CardWriter> cardMakerList = new ArrayList<>();
private RecyclerView recyclerView;
private GridLayoutManager staggeredGridLayoutManagerVertical;
public static CardAdapter cardAdapter;
public OneFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate
(R.layout.fragment_one, container, false);
RecyclerView.LayoutManager staggeredGridLayoutManagerVertical = new
StaggeredGridLayoutManager(4,LinearLayoutManager.VERTICAL);
recyclerView = (RecyclerView) rootView.findViewById(R.id.card_grid);
cardAdapter = new CardAdapter(cardMakerList);
recyclerView.setLayoutManager(staggeredGridLayoutManagerVertical);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(cardAdapter);
recyclerView.addOnItemTouchListener(new
RecyclerTouchListener(getActivity().getApplicationContext(),
recyclerView, new ClickListener() {
@Override
public void onClick(View view, int position) {
CardWriter cardWriter = cardMakerList.get(position);
SpeakGrid.cardMakerList.add(SpeakGrid.cardMakerList.size(),cardWriter);
SpeakGrid.cardAdapter.notifyItemInserted(SpeakGrid.cardMakerList.size());
SpeakRecyclerGrid.cardMakerList.add
(SpeakRecyclerGrid.cardMakerList.size(),cardWriter);
SpeakRecyclerGrid.cardAdapter.notifyItemInserted
(SpeakGrid.cardMakerList.size());
Snackbar.make(view, "This card is " +
cardWriter.getCardEmotion() + " and it would say " +
cardWriter.getCardEmotion(), Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
ive been going through and debugging this and it was also happening while rotating so im now using if (savedinstance state == null) to solve the issue with rotating but it must be lost when scrolling because it still happens if i scroll more than one away and come back the cards in the view have doubled
【问题讨论】:
标签: android android-fragments android-recyclerview android-lifecycle