這是一個我覺得很奇怪的事情,我想把一個由activity傳過來的HashMap的內(nèi)容放到listView中private?ListView?mListView=null;//listView
private?SimpleAdapter?sim_adapter;//簡單適配器
private?List<Map<String,Object>>dateList;//數(shù)據(jù)源
HashMap<String,String>?freList=null;
public?View?onCreateView(LayoutInflater?inflater,?@Nullable?ViewGroup?container,?Bundle?savedInstanceState)?{
????View?view=inflater.inflate(R.layout.fragment_fre_list,null);
????mListView=(ListView)?view.findViewById(R.id.listView);
????Bundle?bundle=getArguments();//可以很確定這個bundle一定是接收到了的,可奇怪就奇怪在這個地方
????SerMap?serializableMap?=?(SerMap)?bundle.get("freList");
????//定義SerMap方法(這是我自己寫的一個方法可以吧HashMap?serializable化)
????freList=serializableMap.getMap();
????dateList=new?ArrayList<Map<String,?Object>>();
????dateList=getData();
????sim_adapter=new?SimpleAdapter(getActivity(),dateList,R.layout.item,new?String[]{"friend","newCount"},new?int[]{R.id.friend,R.id.newCount});
????mListView.setAdapter(sim_adapter);
????return?view;
}這是定義數(shù)據(jù)源的getData方法private?List<Map<String,Object>>?getData(){
????int?k=freList.size();//得到map的長度
????Object[]?keys?=??freList.keySet().toArray();
????Object[]?values?=??freList.values().toArray();//鍵和值都分別轉(zhuǎn)換為數(shù)組
??/*??for?(i=0;i<k;i++){
????????System.out.println("--------"+i+"---------");
????????System.out.println("--------"+keys[i]+"---------");
????????System.out.println("--------"+values[i]+"---------");
????}*/?//?這是一個注釋掉的代碼?這里也有一個奇怪的地方--->如果把接下來的for循環(huán)注釋掉這個循環(huán)可以正常輸出
????而如果把這段注釋掉運(yùn)行接下來的循環(huán)就會報數(shù)組越界的異常。
????for(int?i=0;i<k;i++){
????????Map<String,Object>map=new?HashMap<String,?Object>();
????????map.put("friend",keys[i]);
????????map.put("newCount",values[i]);
????????dateList.add(map);
????}
????return?dateList;
}然后最主要的奇怪的地方是這里(這段代碼如果這么寫的話):public?View?onCreateView(LayoutInflater?inflater,?@Nullable?ViewGroup?container,?Bundle?savedInstanceState)?{
????View?view=inflater.inflate(R.layout.fragment_fre_list,null);
????mListView=(ListView)?view.findViewById(R.id.listView);
????Bundle?bundle=getArguments();//可以很確定這個bundle一定是接收到了的,可奇怪就奇怪在這個地方
????if(bundle!=null){//把上邊的那段代碼放在這個if語句中
????SerMap?serializableMap?=?(SerMap)?bundle.get("freList");
????freList=serializableMap.getMap();
????dateList=new?ArrayList<Map<String,?Object>>();
????dateList=getData();
????sim_adapter=new?SimpleAdapter(getActivity(),dateList,R.layout.item,new?String[]{"friend","newCount"},new?int[]{R.id.friend,R.id.newCount});
????mListView.setAdapter(sim_adapter);
????}
????return?view;
}如果這么寫,程序會正常運(yùn)行也不會報getString方法空指針的錯誤,可是listView就不會在UI界面顯示??扇绻竦谝环N那樣寫,就會報getString空指針異常.各路大神能否拯救一下我這個萌新?在做一個手機(jī)QQ的項目.快到期了,可是被這個問題困擾好幾天了.大家能否幫幫我~~感激不盡?
- 0 回答
- 0 關(guān)注
- 1534 瀏覽
添加回答
舉報
0/150
提交
取消