ListView
にArrayList
を設定しようとしています。これはAndroidのFragment
から解決されていません。 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
というエラーが表示されます。ListViewがnullに戻る
onActivityCreated
の方法では、ListView
を初期化するにはどうすればよいですか?
Fragment.java
private static final String TAG = SystemConditionsFragment.class.getSimpleName();
private OnFragmentInteractionListener mListener;
private ListView lv;
private ListAdapter adapter;
private ArrayList<String> alerts;
private ProgressDialog progDailog;
public SystemConditionsFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment SystemConditionsFragment.
*/
// TODO: Rename and change types and number of parameters
public static SystemConditionsFragment newInstance(String param1, String param2) {
SystemConditionsFragment fragment = new SystemConditionsFragment();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_system_conditions, container, false);
lv = (ListView) rootView.findViewById(R.id.listView);
return rootView;
}
// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
@Override
public void onStart() {
super.onStart();
refresh();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public void refresh() {
progDailog = ProgressDialog.show(getActivity(), "Loading","Please wait...", true);
progDailog.setCancelable(false);
progDailog.dismiss();
final ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JsonOrgModule());
Log.d(TAG, "Requesting events data");
VolleyUtils.makeJsonObjectRequest(getActivity().getApplicationContext(),
"events",
new VolleyResponseListener() {
@Override
public void onError(String message) {
Log.e(TAG, "Error requesting events: " + message);
}
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, "Received events response " + response);
DataRestResponse<SysCondRecord> data = mapper.convertValue(
response,
new TypeReference<DataRestResponse<SysCondRecord>>() {});
// Group by timestamp
ImmutableMultimap<DateTime, SysCondRecord> indexedData =
Multimaps.index(data.getData(),
new Function<SysCondRecord, DateTime>() {
@Override
public DateTime apply(SysCondRecord record) {
return record.getTimeStamp();
}
});
alerts = new ArrayList<>();
final List<DateTime> timestamp = new ArrayList<>();
for (SysCondRecord record : data.getData()) {
timestamp.add(record.getTimeStamp());
alerts.add(record.getMessage());
}
adapter = new ArrayAdapter(getActivity(),R.layout.fragment_system_conditions, R.id.listView, alerts);
lv.setAdapter(adapter);
}
});
}
fragment_system_conditions.xml
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView"
android:layout_below="@+id/sysCondView"
android:layout_centerHorizontal="true"
android:layout_marginTop="36dp" />
編集
私は私の悪い、間違ったIDの連中を使用して、実際にありました!しかし、私は、画面の向きを変更したときにそれらが再接続され、)私はonResume(で表示項目を初期化する傾向がある
FATAL EXCEPTION: main
Process: xx.xxx.com, PID: 26183
java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
'fragment_system_conditions.xml'には、' android:id = "@ + id/sysCondView" 'を持つリストビューが含まれていますか?それはあなたがnullになる1つの理由です。 –
さて、あなたは 'R.id.sysCondView'を見つけようとしていますが、あなたのListViewのIDは' R.id.listView'です... 'sysCondView'は何ですか? ? –
ニースのスポット@ cricket_007。私はxmlで編集されたバージョンを見たことがありません。偉大な仕事の男、私はここで4ヶ月間、あなたが3Kの担当者と同じようにしていたので、ここであなたに続いてきました。大ファン:D – Vucko