[英]Fragment BaseAdapter returns a NullPointerException
我的應用程序包含兩個Fragments
,需要從MainActivity
獲取信息。 在MainActivity
將數據加載並放入ArrayLists
,然后將其顯示在第一個Fragment
。 因此,我創建了一個將ArrayLists
傳遞給第一個Fragment
。
我遇到的問題是,我的Fragment
類中的mContactsAdapter = new SimpleAdapter(...)
行上出現NullPointerException
。 但是我不明白為什么會這樣,因為我在onCreateView
方法中設置了Adapter
。 設置錯誤嗎?
我的主要活動:
public class MainActivity extends AppCompatActivity {
ArrayList<HashMap<String, String>> contactList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contactList = new ArrayList<>();
}
public void FillAndPresent() {
/***
* fill ArrayLists
* ...
*/
CallsFragment fragment = new CallsFragment();
((CallsFragment) fragment).show(contactList);
}
}
我的片段類:
public class CallsFragment extends Fragment{
private BaseAdapter mContactsAdapter;
private final List<HashMap<String, String>> mContactsListItems = new ArrayList<>();
public CallsFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_calls, container, false);
((ListView) view.findViewById(R.id.list))
.setAdapter(mContactsAdapter);
return view;
}
public void show(ArrayList c){
mContactsAdapter = new SimpleAdapter(
getActivity(), mContactsListItems,
R.layout.list_item, new String[]{"price", "brand",
"dist"}, new int[]{R.id.price,
R.id.brand, R.id.dist});
mContactsListItems.addAll(c);
mContactsAdapter.notifyDataSetChanged();
((ListView) getActivity().findViewById(R.id.list))
.setAdapter(mContactsAdapter);
}
}
如@ 0x0nosugar所說
發生這種情況是因為片段尚未附加到活動中”
嘗試這個
CallsFragment fragment = new CallsFragment();
fragment.show(contactList);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.mainActivity,fragment);
// >> here you replace the main activity layout with your fragment by put the id of it.
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
在此處閱讀有關片段的更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.