我目前正在学习使用片段,到目前为止,我已经非常成功,但却出现了以下错误:
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");
}
}
答案 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;
}