2013-03-29 47 views
0

當適配器更改片段內的listview時,我一直在使用片段敲擊牆並觸發視圖刷新。現在我有:獲取視圖時的Android片段空指針

  • 其保持FragmentManager
  • 活性基於通過FragmentPagerAdapter.getItem方法
  • 隨後活性或按鈕按壓位置產生的片段的一個主要的活動會使後面的一個數據片段來改變
  • 活性呼籲定製的片斷類的刷新方法來觸發數據刷新
  • 刷新方法取入的ListView對象在片段
    • 這就是空發生異常

刷新方法如下:

public void refresh() { 
    groups = new Select() 
    .from(Group.class) 
    .execute(); 

    listView = (ListView)getActivity().findViewById(R.id.overview_container); 
    // Never get here 
    groupAdapter.clear(); 
    groupAdapter.setItems(groups); 
    listView.invalidateViews(); 
} 

的設置是

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.fragment_overview, container, false); 

    groups = new Select() 
    .from(Group.class) 
    .execute(); 

    listView = (ListView)view.findViewById(R.id.overview_container); 
    listView.setAdapter(new GroupAdapter(view.getContext(), R.layout.time_view, groups));  
    return view; 
} 

有一些基本的東西,我在這裏失蹤?這裏有一個更容易的模式,像聽衆可以解決這個問題嗎?我似乎無法讓視圖返回任何空值 - 即使我存儲它。

+0

你確定這是在onAttach()之後調用的嗎?你肯定有一個ListView,這個ID目前在Activity中膨脹了嗎? –

+0

你最好在onCreateView方法中找到你的列表視圖,然後保存它的實例或類似的東西,以便在需要時刷新它... – yahya

+0

這至少在onCreateView之後被調用 - 但在片段活躍顯示時調用刷新屏幕 – methodin

回答

0

我通過FragmentManager獲取Fragment並轉換爲原始界面來運行界面方法 - 這似乎已經返回了一個意外的版本,它不一定是活動的Fragment,從而導致我遇到的問題。

相反,我一直將自己的引用保存到生成的碎片中,以便我可以隨意引用它們。