2013-07-27 4 views
0

Я пытаюсь использовать ListView во фрагменте. Но getActivity() - null. Я уже искал и нашел много тем по этой теме, но это было не очень полезно.
Вот мой код:getActivity is null

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

В ListFragment в onAttach() методе ваш фрагмент еще не прикреплен к любому Activity, поэтому вы получив нулевое значение.

Изменение:

mContext = getActivity(); 

To:

mContext = activity; 

Или использовать getActivity() внутри onCreateView(), например.


Другая проблема заключается в создании вашего фрагмента, но он не привязан к какой-либо деятельности при использовании makeList(), поэтому вы получаете нулевое значение при использовании getActivity().

Правильный способ сделать это, например, позвонить makeList() внутри onCreateView() вашего ListView фрагмента.

Кроме того, после создания фрагмента вы должны добавить его:

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

Вы должны прочитать о том, как работать с фрагментами: http://developer.android.com/guide/components/fragments.html

+0

'изменил его. К сожалению, все еще получаю FATAL EXCEPTION: main java.lang.NullPointerException – ternes3

+0

См. Мой отредактированный ответ – Andres

Смежные вопросы