2012-05-19 30 views
14

Uygulamamı AsyncTasks'tan Fragements'a taşıyorum.ListeYeni liste görünümü nasıl alınır?

Ancak bölümümdeki listView (id: list) öğesine nasıl erişebilirim?

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> 

Ör:

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 –

cevap

26

onCreateView doc kalır gibidir: yöntem dönmez çünkü böylece

creates and returns the view hierarchy associated with the fragment 

, değil edecekerişebilir'dan getListView()'a. Geçerli bir referansı onActivityCreated geri aramada alabilirsiniz. Yoksa ListView görünümden list_fragment.xml

+1

Ben onActivityCreate kullanıp contentView olsun 100 milisaniye beklemede – CQM

6

olsun liste görünüm içinde beyan edilmiş olması halinde v.findViewById(android.R.id.list) kullanmayı deneyebilirsiniz, daha önce alıyorsanız.

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'e bunun yerine OnViewCreated yöntemiyle erişebildim.

+3

beklemede bir postdelayed yöntemini kullanarak bile oluşturulmadı, Bu benim için en uygun çözüm gibi görünüyor. the docs'a göre ... onViewCreated 'onCreateView (LayoutInflater, ViewGroup, Bundle) döndükten hemen sonra çağrıldı, ancak kaydedilen herhangi bir durum görünümde geri yüklenmeden önce. Bu, alt sınıflara, görünüm hiyerarşisinin tamamen oluşturulduğunu öğrendiklerinde kendilerini başlatma şansı verir. Parçanın görünüm hiyerarşisi, ancak bu noktada ebeveyne bağlı değildir. –

4

Bu sorunun en kolay ve daha güvenilir çözümü, geçersiz kılmayı etkin kılmak olacaktır. ve oradaki liste manipülasyonlarını yapın.

@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 
     } 
    }; 
İlgili konular