我有一个基本上是列表视图的片段。父活动调用一种方法来从服务中检索名单项列表。当数据从服务返回时,我在传递的片段和名单项的ArrayList上调用updateRosterItems。问题是它第一次运行,但是当我选择一个不同的选项卡,然后返回带有片段的选项卡时,getActivity()返回null,我无法将数据连接到ArrayAdapter。
这是updateRosterItems函数的代码:
public void updateRosterList(ArrayList<RosterInfo> rosterItems)
{
if(_adapter == null)
{
_adapter = new RosterItemAdapter(getActivity(), R.layout.roster_listview_item, rosterItems);
}
Activity activity = getActivity();
if(activity != null)
{
ListView list = (ListView)activity.findViewById(R.id.lstRosterItems);
list.setAdapter(_adapter);
_adapter.notifyDataSetChanged();
}
}
我已经读过在附加片段之前调用代码导致的类似问题。我想我的问题是,有没有办法延迟调用updateRosterList直到调用onAttach之后?我遇到的解决方案是,如果getActivity()返回null,则将数据存储在片段中的私有变量中,并在onAttach方法中检查varialbe中是否有数据,然后在适配器上调用更新。这看起来有点哈哈。有什么想法吗?
答案 0 :(得分:2)
更新:我已经设法通过这样做来实现它。我对Android开发很陌生,作为一个解决方案,对我来说似乎有些苛刻。有没有更好的办法?基本上,updateRosterList函数是从片段外部调用的函数。
public class RosterListFragment extends Fragment {
RosterItemAdapter _adapter = null;
private ArrayList<RosterInfo> _items;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.roster_listview, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
if(_items != null)
{
performUpdateRosterList(_items);
}
}
public void updateRosterList(ArrayList<RosterInfo> rosterItems)
{
Activity activity = getActivity();
if(activity != null)
{
performUpdateRosterList(rosterItems);
}
else
{
_items = rosterItems;
}
}
private void performUpdateRosterList(ArrayList<RosterInfo> rosterItems)
{
Activity activity = getActivity();
if(_adapter == null)
{
_adapter = new RosterItemAdapter(activity, R.layout.roster_listview_item, rosterItems);
}
ListView list = (ListView)activity.findViewById(R.id.lstRosterItems);
list.setAdapter(_adapter);
_adapter.notifyDataSetChanged();
}
}
答案 1 :(得分:1)
你是对的,活动尚未附加。有两种方法可以解决这个问题。
就个人而言,我会说第一个可能是更好的路径,但任何一个都可以正常工作。