2013-07-27 72 views
0

我試圖在片段中使用ListView。但是getActivity()爲空。我已經搜索並找到了關於這個主題的許多線索,但這些並不是很有幫助。
這裏是我的代碼:getActivity爲空

ListView.java

package de.listview.example; 
import android.app.Activity; 
import android.content.Context; 
import android.support.v4.app.ListFragment; 
import android.util.Log; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 

public class ListViews extends ListFragment { 

    private AdapterView.OnItemClickListener listener; 

    public void makelist() 
    { 
     String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
        "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
        "Linux", "OS/2" }; 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
     android.R.layout.simple_list_item_1, values); 
     setListAdapter(adapter); 
    } 

} 

MainActivity.java

public static class ListFragment extends Fragment 
{ 

    Context mContext; 

    @Override 
    public void onAttach(Activity activity) { 
     mContext = getActivity(); 
     Log.i("Event", "onAttach called"); 
     super.onAttach(activity); 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     ListViews lst = new ListViews(); 
     lst.makelist(); 
     return inflater.inflate(R.layout.whitelist_content, container, false); 
    } 


} 

case 2: 
    fragmentManager.beginTransaction() 
       .replace(R.id.content_frame, new ListFragment()) 
       .commit(); 
    break; 
+0

你應該仔細閱讀文檔片段和活性 – Blackbelt

+1

'getActivity ()'爲null,因爲你的'Fragment'還沒有附加到'Activity',這意味着佈局還沒有膨脹。這是標準行爲。你應該熟悉[片段生命週期](http://developer.android.com/guide/components/fragments.html#Lifecycle)。 –

回答

1

ListFragmentonAttach()方法的片段仍然不依附於任何Activity這就是爲什麼你得到一個空值。

變化:

mContext = getActivity(); 

要:

mContext = activity; 

或者使用getActivity()onCreateView()例如。


另一個問題是要創建您的片段,但是當你使用makeList()這就是爲什麼你正在使用getActivity()當得到一個空值是不依附於任何活動。

做正確的做法是,例如呼叫makeList()裏面你ListView片段onCreateView()

而且創建片段之後,你必須使用添加:

fragmentManager.beginTransaction().replace(R.id.content_frame, lst).commit(); 

你應該閱讀有關如何使用碎片工作:http://developer.android.com/guide/components/fragments.html

+0

已經改變了。不幸的是仍然得到了致命的異常:main java.lang.NullPointerException – ternes3

+0

看我編輯的答案 – Andres

相關問題