这是一个我觉得很奇怪的事情,我想把一个由activity传过来的HashMap的内容放到listView中
private ListView mListView=null;//listView private SimpleAdapter sim_adapter;//简单适配器 private List<Map<String,Object>>dateList;//数据源 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; }
这是定义数据源的getData方法
private List<Map<String,Object>> getData(){ int k=freList.size();//得到map的长度 Object[] keys = freList.keySet().toArray(); Object[] values = freList.values().toArray();//键和值都分别转换为数组 /* for (i=0;i<k;i++){ System.out.println("--------"+i+"---------"); System.out.println("--------"+keys[i]+"---------"); System.out.println("--------"+values[i]+"---------"); }*/ // 这是一个注释掉的代码 这里也有一个奇怪的地方--->如果把接下来的for循环注释掉这个循环可以正常输出 而如果把这段注释掉运行接下来的循环就会报数组越界的异常。 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; }
如果这么写,程序会正常运行也不会报getString方法空指针的错误,可是listView就不会在UI界面显示。可如果像第一种那样写,就会报getString空指针异常.
各路大神能否拯救一下我这个萌新?在做一个手机QQ的项目.快到期了,可是被这个问题困扰好几天了.大家能否帮帮我~~感激不尽
相关分类