Reputation: 2679
Hi I'm creating a fragment with a listview inside it. Whenever I run the code, I get a java.lang.nullpointerexception
in My Fragment
. The error log says that the problem is in line no. 24
Line No. 24: ListView messsagesListView = (ListView) getView.findViewById(R.id.messages_list)
Here is my code:
My Fragment Class:
public class MessageFragment extends Fragment {
private List<MessageItem> messagesList = new ArrayList<MessageItem>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
ListView messagesListView = (ListView) getView()
.findViewById(R.id.messages_list);
populateMessagesList();
ArrayAdapter<MessageItem> messageListAdapter = new MessageListAdapter();
messagesListView.setAdapter(messageListAdapter);
return inflater.inflate(R.layout.messages_fragment, container);
}
public void populateMessagesList() {
messagesList.add(new MessageItem("Gary Walts",
"10/13/2013, 5:31:55 PM", "22"));
messagesList.add(new MessageItem("Martha Flames",
"10/13/2013, 6:32:35 PM", "41"));
messagesList.add(new MessageItem("Jack Bones",
"10/12/2013, 9:45:32 AM", "165"));
messagesList.add(new MessageItem("Chitambaram Patel",
"10/07/2013, 5:31:55 PM", "21"));
messagesList.add(new MessageItem("Sally Walts",
"10/02/2013, 5:31:55 PM", "323"));
messagesList.add(new MessageItem("Setina Gabriole",
"09/24/2013, 5:31:55 PM", "257"));
messagesList.add(new MessageItem("Carl Fosters",
"09/15/2013, 5:31:55 PM", "22"));
}
class MessageListAdapter extends ArrayAdapter<MessageItem> {
public MessageListAdapter() {
super(getActivity(), R.layout.messages_list_item, messagesList);
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View itemView = convertView;
if (itemView == null) {
itemView = getActivity().getLayoutInflater().inflate(
R.layout.messages_list_item, parent, false);
}
MessageItem messageItem = messagesList.get(position);
TextView friendName = (TextView) itemView
.findViewById(R.id.friend_name);
friendName.setText(messageItem.getFriendName());
TextView dateAndTime = (TextView) itemView
.findViewById(R.id.date_time);
dateAndTime.setText(messageItem.getDateAndTime());
TextView numberOfMessages = (TextView) itemView
.findViewById(R.id.number_messages);
numberOfMessages.setText(messageItem.getNumberOfMessages());
return itemView;
}
}
}
Why is this happening? Thanks in advance.
Upvotes: 3
Views: 5993
Reputation: 133560
Try this
View v = inflater.inflate(R.layout.messages_fragment, null);
ListView messagesListView = (ListView) v
.findViewById(R.id.messages_list);
return v;
or in getView return
return inflater.inflate(R.layout.messages_fragment, null);
Then
public void onActivityCreated(Bundle savedInstanceState) {
View v= getView();
ListView messagesListView = (ListView) v.findViewById(R.id.messages_list);
... // rest of the code
}
Upvotes: 7
Reputation: 2348
I had the same issue too and i solved it by keeping up a reference-object to the hosting view:
public class MyFragment extends Fragment {
private View mContentView = null;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
mContentView = inflater.inflate(R.layout.dialog_disclaimer, null);
builder.setView(mContentView);
return builder.create();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ListView messagesListView = (ListView) mContentView.findViewById(R.id.messages_list);
}
}
Upvotes: 0
Reputation: 14590
In onCreateView() getview() returns null because you have not inflated any view..change your code like this..
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view=inflater.inflate(R.layout.messages_fragment, null);
ListView messagesListView = (ListView) view
.findViewById(R.id.messages_list);
populateMessagesList();
ArrayAdapter<MessageItem> messageListAdapter = new MessageListAdapter();
messagesListView.setAdapter(messageListAdapter);
return view;
}
Upvotes: 2