3

こんにちは、リストビューを含むフラグメントを作成しています。コードを実行するたびにjava.lang.nullpointerexception、 Myに a が表示されFragmentます。エラーログには、問題は行番号にあると書かれています。24

Line No. 24: ListView messsagesListView = (ListView) getView.findViewById(R.id.messages_list)

これが私のコードです:

私のフラグメントクラス:

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;
    }
}
}

なぜこうなった?前もって感謝します。

4

3 に答える 3

3

onCreateView() では、ビューを膨張させていないため、getview() は null を返します..コードを次のように変更します..

@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;
}
于 2013-10-17T09:40:42.523 に答える
0

私も同じ問題を抱えていましたが、ホスティングビューへの参照オブジェクトを維持することで解決しました:

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);
    }
}
于 2013-10-17T09:47:42.037 に答える