gpt4 book ai didi

Android,从其他 fragment 返回的空 ListView

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:21 26 4
gpt4 key购买 nike

嗨,我的 fragment 中有 ListView 。我正在用我的其他 fragment 替换这个 ListView fragment ,但是当我想回到我的列表时,它是空的。我以为我可以恢复我的列表项,但我不知道如何。我假设符合 Fragment 生命周期,我的适配器将可重复使用,但看起来不是。这是我的代码:

public class ThreadListFragment extends Fragment implements FragmentConnectionStatus, ListFragment, OnClickListener, OnItemClickListener{
private ListView ListView;
private PilotController Activity;
private Button ButtonStartNewThread;
private boolean Paused;
private ThreadInfoAdapter adapter;

@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
/**
* Inflate the layout for this fragment
*/
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.threads_list_fragment, container, false);
System.out.println(this.Paused);
if(this.Paused == false){
this.ListView = (ListView) view.findViewById(R.id.listViewActiveThreads);
ArrayList<Guid> strs = new ArrayList<Guid>();
adapter = new ThreadInfoAdapter(view.getContext(), strs, this);
}
this.ListView.setAdapter(adapter);
this.ListView.setItemsCanFocus(true);
this.ListView.setOnItemClickListener(this);
this.Activity = (PilotController) getActivity();
this.ButtonStartNewThread = (Button) view.findViewById(R.id.buttonStartThread);
this.ButtonStartNewThread.setOnClickListener(this);
return view;
}

@Override
public void onPause()
{
super.onPause();
this.Paused = true;
}

但是当我返回到我的旧列表时,它是空的。你能给我一些建议吗?

解决方案

我找到了一个解决方案。 ListView 可能正在从“绘图堆栈”中删除,因此在调用 OnDeleteView 时,您的旧列表下次将无法使用,尽管仍然设置了对该对象的引用。解决方案是重新创建 ListView 并设置旧适配器。此适配器归功于本教程 http://developer.android.com/guide/components/fragments.html将存活但 View 被重新创建(所以旧的 ListView 不再存在(它存在但不可绘制)。我不得不改变这一行:

    if(this.Paused == false){
this.ListView = (ListView) view.findViewById(R.id.listViewActiveThreads);
ArrayList<Guid> strs = new ArrayList<Guid>();
adapter = new ThreadInfoAdapter(view.getContext(), strs, this);
}

到:

    this.ListView = (ListView) view.findViewById(R.id.listViewActiveThreads);
if(this.Paused == false){
ArrayList<Guid> strs = new ArrayList<Guid>();
adapter = new ThreadInfoAdapter(view.getContext(), strs, this);
}

最佳答案

在“onActivityCreated”中,您可以只检查您的数据列表(在您的情况下为“strs”)是否为空。如果不是,则使用它,否则创建一个新的。在代码中,它看起来像这样:

public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

if (strs == null)
strs = new ArrayList<Guid>();

mListView = (ListView)getActivity().findViewById(R.id.listViewActiveThreads);

mPersonAdapter = new ArrayAdapterPerson(getActivity(),mPersonList,this);
mListView.setAdapter(mPersonAdapter);

}

关于Android,从其他 fragment 返回的空 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20314186/

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