2012-05-19 3 views
14

Я портирую свое приложение из AsyncTasks в Fragements.ListFragment как получить listView?

Но как я могу получить доступ к элементу listView (id: list) внутри моего фрагмента?

class MyFragment extends ListFragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.list_fragment, container, false); 
     ListView listView = getListView(); //EX: 
     listView.setTextFilterEnabled(true); 
     registerForContextMenu(listView); 
     return v; 
    } 
} 

XML:

 <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </ListView> 

Ex:

Caused by: java.lang.IllegalStateException: Content view not yet created 
+0

http://stackoverflow.com/questions/9286391/android-why-is-this-telling-me-content-view-not-yet-created –

ответ

26

как onCreateView документ остается:

creates and returns the view hierarchy associated with the fragment 

так, поскольку метод не возвращает, вы не возможность доступа к ListView - getListView(). Вы можете получить действительную ссылку в обратном вызове onActivityCreated. Или вы можете попробовать использовать v.findViewById(android.R.id.list) если ListView объявлен внутри list_fragment.xml

+1

Я использую onActivityCreate и получить contentview не созданный сбой, даже с использованием метода postdelayed со 100 миллисекундным ожиданием – CQM

6

список прибудет Вид с точкой зрения, вы получаете раньше.

View view = inflater.inflate(android.R.layout.list_content, null); 
    ListView ls = (ListView) view.findViewById(android.R.id.list); 
    // do whatever you want to with list. 
3

Я смог получить доступ к ListView с помощью метода OnViewCreated.

+3

Это кажется самым подходящим решением для меня. Согласно the docs ... 'onViewCreated' вызывается сразу после того, как onCreateView (LayoutInflater, ViewGroup, Bundle) вернулась, но до того, как какое-либо сохраненное состояние было восстановлено в представлении. Это дает подклассам возможность инициализировать себя, как только они знают, что их иерархия представлений полностью создана. В этот момент иерархия представления фрагмента не привязана к ее родительскому элементу. –

4

Простым и надежным решением этой проблемы будет переопределение onActivityCreated(); и делайте там свои манипуляции с списком.

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    ListView listView = getListView(); //EX: 
    listView.setTextFilterEnabled(true); 
    registerForContextMenu(listView); 
    super.onActivityCreated(savedInstanceState); 
} 
1
ListFragment listFrag = new ListFragment(){ 
     @Override 
     public void onViewCreated(View view, Bundle savedInstanceState) { 
      super.onViewCreated(view, savedInstanceState); 
      ListView list = getListView(); 
      // DO THINGS WITH LIST 
     } 
    }; 
Смежные вопросы