Reputation: 23
I'm trying out this Udacity course and need help. Why isn't my list showing up in my fragment. Please Help!
package com.example.landon.sunshine.app;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* A placeholder fragment containing a simple view.
*/
public class MainActivityFragment extends Fragment {
public MainActivityFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String[] forecastArray = {
"Today - Sunny - 54/89",
"Tomorrow - Cloudy - 45/60",
"Wednesday - Sunny - 66/77",
"Thursday - Sunny - 67/89",
"Friday - Sunny - 77/95",
"Saturday - Rain - 50/70",
"Sunday - Sunny - 67/88"
};
List<String> weekForecast = new ArrayList<String>(
Arrays.asList(forecastArray));
ArrayAdapter<String> mForecastAdapter = new ArrayAdapter<String>(
getActivity(),
R.layout.list_item_forecast,
R.id.list_item_forecast_textview,
weekForecast
);
Activity rootView = null;
ListView listView = (ListView) rootView.findViewById(
R.id.listview_forecast);
listView.setAdapter(mForecastAdapter);
return inflater.inflate(R.layout.fragment_main, container, false);
}
}
I'm new to java and new to android, hence the learning. I really hope someone can help.
I'm not even sure what it's wants me to say more of. I am studying this course and it's driving me insane. I have done this for several days looking for the errors and havent found too much of anything. But I have faith in this community, because this community taught me all my mistakes in javascript and css. Thank You
Upvotes: 2
Views: 398
Reputation: 7929
You set your rootView to null rootView = null;
and you'r trying to get the ListView
from a null
object rootView.findViewById()
, you'll have a NullPointerException here.
Also rootView
should be an instance of View
not an Activity
.
Change your code like that:
public class MainActivityFragment extends Fragment {
String[] forecastArray = {
"Today - Sunny - 54/89",
"Tomorrow - Cloudy - 45/60",
"Wednesday - Sunny - 66/77",
"Thursday - Sunny - 67/89",
"Friday - Sunny - 77/95",
"Saturday - Rain - 50/70",
"Sunday - Sunny - 67/88"
};
View rootView;
public MainActivityFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_main, container, false);
List<String> weekForecast = new ArrayList<String>(
Arrays.asList(forecastArray));
ArrayAdapter<String> mForecastAdapter = new ArrayAdapter<String>(
getActivity(),
R.layout.list_item_forecast,
R.id.list_item_forecast_textview,
weekForecast);
ListView listView = (ListView) rootView.findViewById(R.id.listview_forecast);
listView.setAdapter(mForecastAdapter);
return rootView;
}
}
Upvotes: 0
Reputation: 126
use
View view = inflater.inflate(R.layout.fragment_main,container, false);
and
ListView listView = (ListView) view.findViewById(R.id.listview_forecast);
Upvotes: 0
Reputation: 3332
You don't see your ListView because you're inflating your layout file twice. You first inflated it at:
View view = inflater.inflate(R.layout.fragment_main, container, false);
and again at:
return inflater.inflate(R.layout.fragment_main, container, false);
Therefore you're inflating your layout, initialising it, then returning a newly-inflated layout. That's why you don't see it.
You should just do return view
instead, like so:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
.
.
.
return view;
}
Upvotes: 0
Reputation: 1373
inside your getView method
use a view which inflates your layout and use this view to declare the listview and return the same view at the end of GetView() method.You can use like this,
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
String[] forecastArray = {
"Today - Sunny - 54/89",
"Tomorrow - Cloudy - 45/60",
"Wednesday - Sunny - 66/77",
"Thursday - Sunny - 67/89",
"Friday - Sunny - 77/95",
"Saturday - Rain - 50/70",
"Sunday - Sunny - 67/88"
};
List<String> weekForecast = new ArrayList<String>(
Arrays.asList(forecastArray));
ArrayAdapter<String> mForecastAdapter = new ArrayAdapter<String>(
getActivity(),
R.layout.list_item_forecast,
R.id.list_item_forecast_textview,
weekForecast
);
ListView listView = (ListView) view.findViewById(
R.id.listview_forecast);
listView.setAdapter(mForecastAdapter);
return view;
}
Upvotes: 2
Reputation: 4490
Change:
Activity rootView = null;
ListView listView = (ListView) rootView.findViewById(R.id.listview_forecast);
listView.setAdapter(mForecastAdapter);
return inflater.inflate(R.layout.fragment_main,container, false);
to:
View rootView = inflater.inflate(R.layout.fragment_main, container, false);;
ListView listView = (ListView) rootView.findViewById(R.id.listview_forecast);
listView.setAdapter(mForecastAdapter);
return rootView ;
Upvotes: 1