片段错误

时间:2015-10-14 05:41:34

标签: java android fragment

我目前正在学习使用片段,到目前为止,我已经非常成功,但却出现了以下错误:

10-14 15:24:55.309 21831-21831/? E/AndroidRuntime: FATAL EXCEPTION: main
10-14 15:24:55.309 21831-21831/? E/AndroidRuntime: Process: com.example.wq.myapp, PID: 21831
10-14 15:24:55.309 21831-21831/? E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
10-14 15:24:55.309 21831-21831/? E/AndroidRuntime:     at com.example.wq.myapp.PhoneMessages.onActivityCreated(PhoneMessages.java:44)

如果有人能够解释我做错了什么,我将不胜感激:)

这是我的片段代码:

package com.example.wq.myapp;


import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

public class PhoneMessages extends Fragment {

    ListView lvMsgList;

    // Cursor Adapter
    SimpleCursorAdapter adapter1;

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

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {

        // Create Inbox box URI
        Uri inboxURI = Uri.parse("content://mms-sms/conversations");
        // Fetch Inbox SMS Message from Built-in Content Provider
        Cursor a = getActivity().getContentResolver().query(inboxURI, new String[]{"*"}, null, null, "normalized_date desc");
        // Attach Cursor with adapter and display in listView
        adapter1 = new SimpleCursorAdapter(getActivity().getApplicationContext(), R.layout.row, a,
                new String[]{"body", "date", "address", "thread_id"},
                new int[]{R.id.lblMsg, R.id.lblDate, R.id.lblNumber, R.id.lblID}, 0);
        lvMsgList.setAdapter(adapter1);
        //set OnItemClickListener for listView, start ConvListActivity
        lvMsgList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                TextView TVConvID = (TextView) view.findViewById(R.id.lblID);
                String ConvID = TVConvID.getText().toString();
                Intent i = new Intent(getActivity(), ConvListActivity.class);
                i.putExtra("CID", ConvID);
                startActivity(i);
            }
        });
        getActivity().setTitle("Phone Messages");
    }
}

1 个答案:

答案 0 :(得分:1)

你从未夸大你的列表视图,所以你得到一个空指针。在onCreateView中也可以这样做。

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

    lvMsgList = (ListView) rootView.findViewById(R.id./*listview*/);

    // Create Inbox box URI
    Uri inboxURI = Uri.parse("content://mms-sms/conversations");
    // Fetch Inbox SMS Message from Built-in Content Provider
    Cursor a = getActivity().getContentResolver().query(inboxURI, new String[]{"*"}, null, null, "normalized_date desc");
    // Attach Cursor with adapter and display in listView
    adapter1 = new SimpleCursorAdapter(getActivity().getApplicationContext(), R.layout.row, a,
            new String[]{"body", "date", "address", "thread_id"},
            new int[]{R.id.lblMsg, R.id.lblDate, R.id.lblNumber, R.id.lblID}, 0);
    lvMsgList.setAdapter(adapter1);
    //set OnItemClickListener for listView, start ConvListActivity
    lvMsgList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            TextView TVConvID = (TextView) view.findViewById(R.id.lblID);
            String ConvID = TVConvID.getText().toString();
            Intent i = new Intent(getActivity(), ConvListActivity.class);
            i.putExtra("CID", ConvID);
            startActivity(i);
        }
    });
    getActivity().setTitle("Phone Messages");

    return rootView;
}