gpt4 book ai didi

java - setRetainInstance() 方法是否保留 ArrayAdapter 数据?

转载 作者:行者123 更新时间:2023-12-02 04:56:59 25 4
gpt4 key购买 nike

我正在使用一个具有 SearchActivity 的应用程序;搜索 Activity 只是“SearchFragment”的容器,“SearchFragment”在ActionBar中包含一个SearchView,其主要布局有一个RecyclerView来显示搜索结果。假设用户执行搜索,结果显示在 RecyclerView 中,然后用户旋转屏幕...在这种情况下,我使用 setRetainInstance(true) 方法。我假设我的自定义 ArrayAdapter 数据将被保存,但事实并非如此。我知道我可以将 ArrayAdapter 数据保存在 Bundle 中用于 onSaveInstanceState() 方法。但我想知道为什么 setRetainInstance() 方法不起作用。

public class SearchFragment extends Fragment
implements SearchView.OnQueryTextListener,
ResultsListAdapter.ItemClickListener {

private ResultsListAdapter mListAdapter;
private CustomRecyclerView resultsList;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}

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

View rootView = inflater.inflate(R.layout.fragment_search, container, false);

RecyclerView.LayoutManager linearManager = new LinearLayoutManager(getActivity());
mListAdapter = new ResultsListAdapter(new ArrayList<Kiosk>(), this);

resultsList.setAdapter(mListAdapter);
resultsList.setLayoutManager(linearManager);
resultsList.setSetEmptyView(rootView.findViewById(R.id.empty_view));

if (savedInstanceState == null){
setRetainInstance(true);
}

return rootView;
}
@Override
public boolean onQueryTextSubmit(String s) {
if(s.isEmpty()) {
//Set an empty array, to set an empty view
mListAdapter.changeData(new ArrayList<Kiosk>());
mListAdapter.notifyDataSetChanged();
}

ArrayList<Kiosk> kiosksFound = performSearch(s);

mListAdapter.changeData(kiosksFound);
mListAdapter.notifyDataSetChanged();

return false;
}

@Override
public boolean onQueryTextChange(String s) {
if(s.isEmpty()) {
//Set an empty array, to set an empty view
mListAdapter.changeData(new ArrayList<Kiosk>());
mListAdapter.notifyDataSetChanged();
return false;
}

ArrayList<Kiosk> kiosksFound = performSearch(s);

mListAdapter.changeData(kiosksFound);
mListAdapter.notifyDataSetChanged();

return false;
}

}

最佳答案

即使保留状态,onCreateView 仍会被调用。由于您在那里重新创建 ListView ,因此数据被清除。

关于java - setRetainInstance() 方法是否保留 ArrayAdapter 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28667274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com