mesopotamia
mesopotamia

Reputation: 393

How to fill list view in fragment activity?

I am trying to fill my list in a fragment but it return null object reference.(Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference) There is my code:

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        person.add(new Gender("35AE111", false, "60 km/h"));

        final ListView listview= (ListView)getView().findViewById(R.id.liste);

        CustomAdapter customAdapter=new CustomAdapter(getActivity(), kisiler);
        listview.setAdapter(customAdapter);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_all_vehicles, container, false);
    }
}

Upvotes: 0

Views: 132

Answers (5)

Claud
Claud

Reputation: 1075

To make sure your view is inflated you can override onViewCreated

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    person.add(new Gender("35AE111", false, "60 km/h"));

    final ListView listview= (ListView) view.findViewById(R.id.liste);

    CustomAdapter customAdapter = new CustomAdapter(getActivity(), kisiler);
    listview.setAdapter(customAdapter);
}

Also make sure that the listview id is correct in your XML, sometimes that is an issue.

Upvotes: 0

pvn
pvn

Reputation: 2106

The null ptr exception happened since onCreate() got called before onCreateView() and getView() in onCreate returned null. Try the below snippet. I have moved your code in onCreate() to onCreateView()

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_all_vehicles, container, false);
    person.add(new Gender("35AE111", false, "60 km/h"));

    final ListView listview= (ListView)getView().findViewById(R.id.liste);

    CustomAdapter customAdapter=new CustomAdapter(getActivity(), kisiler);
    listview.setAdapter(customAdapter);
    return view;
}

Upvotes: 0

Gavriel
Gavriel

Reputation: 19237

You need to move your things that need the view into onCreateView:

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    person.add(new Gender("35AE111", false, "60 km/h"));
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_all_vehicles, container, false);
    final ListView listview= (ListView)view.findViewById(R.id.liste);

    CustomAdapter customAdapter=new CustomAdapter(getActivity(), kisiler);
    listview.setAdapter(customAdapter);
    return view;
}

Upvotes: 1

Arsal Imam
Arsal Imam

Reputation: 2982

The exception arising because you are calling findviewbyid(int) in onCreate() and inflating layout in onCreateView()....!

The issue is that onCreate() method of a fragment calls first and after that onCreateView is called by the fragment life cycle...!

You should read the fragment's life cycle

Below code help you,

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_all_vehicles, container, false);
        person.add(new Gender("35AE111", false, "60 km/h"));

        final ListView listview= (ListView)view.findViewById(R.id.liste);

        CustomAdapter customAdapter=new CustomAdapter(getActivity(), kisiler);
        listview.setAdapter(customAdapter);
return view;
    }
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
}

Upvotes: 0

amukhachov
amukhachov

Reputation: 5900

The problem is that Fragment's view is not created yet in onCreate method. You should move your code from onCreate to onCreateView:

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_all_vehicles, container, false);

    final ListView listview= (ListView)view.findViewById(R.id.liste);

    CustomAdapter customAdapter=new CustomAdapter(getActivity(), kisiler);
    listview.setAdapter(customAdapter);

    return view;
}

Upvotes: 0

Related Questions