2013-04-12 140 views
0

我设计了一个自定义BaseAdapter,它需要一个类(JsonKeys)的ArrayList,它包含我需要的数据的getter和setter。自定义BaseAdapter只将最后一个元素添加到ListView

我基本上解析JSON阵列并插入相应数据为ListRows设为其如下:

"attendanceData": [ 
    { 
     "ccode": "MAT 212", 
     "cname": "ENGINEERING MATHEMATICS- IV", 
     "cclass": "30", 
     "bunked": "5", 
     "percent": "86", 
     "updated": "3\/20\/13" 
    }, 
    { 
     "ccode": "CSE 202", 
     "cname": "FORMAL LANGUAGES & AUTOMATA THEORY", 
     "cclass": "28", 
     "bunked": "3", 
     "percent": "91", 
     "updated": "3\/15\/13" 
    }, 
    { 
     "ccode": "CSE 204", 
     "cname": "RELATIONAL DATABASE MANAGEMENT SYSTEMS", 
     "cclass": "24", 
     "bunked": "2", 
     "percent": "93", 
     "updated": "3\/15\/13" 
    }, 
    { 
     "ccode": "CSE 206", 
     "cname": "MICROPROCESSORS", 
     "cclass": "30", 
     "bunked": "1", 
     "percent": "97", 
     "updated": "3\/6\/13" 
    }, 
    { 
     "ccode": "CSE 208", 
     "cname": "EVENT DRIVEN PROGRAMMING USING JAVA", 
     "cclass": "32", 
     "bunked": "2", 
     "percent": "95", 
     "updated": "3\/14\/13" 
    }, 
    { 
     "ccode": "OPE 1", 
     "cname": "OPEN ELECTIVE - ADVERTISING THEORY & PRACTICE (PME 332)", 
     "cclass": "13", 
     "bunked": "3", 
     "percent": "82", 
     "updated": "3\/21\/13" 
    }, 
    { 
     "ccode": "CSE 210", 
     "cname": "MICROPROCESSORS LAB", 
     "cclass": "NA", 
     "bunked": "NA", 
     "percent": "NA", 
     "updated": "NA" 
    }, 
    { 
     "ccode": "CSE 212", 
     "cname": "JAVA PROGRAMMING LAB", 
     "cclass": "NA", 
     "bunked": "NA", 
     "percent": "NA", 
     "updated": "NA" 
    }, 
    { 
     "ccode": "CSE 214", 
     "cname": "RELATIONAL DATABASE MANAGEMENT SYSTEMS LAB", 
     "cclass": "NA", 
     "bunked": "NA", 
     "percent": "NA", 
     "updated": "NA" 
    } 
    ] 

这些是我的班自定义BaseAdapter和分别膨胀的列表视图,片段。

public class AttendanceListAdapter extends BaseAdapter 
{ 
    private ArrayList<JsonKeys> adapterkeylist = new ArrayList<JsonKeys>(); 
    private Context context; 
    private static LayoutInflater inflater = null; 
    TextView subject, code, attended, absent, percent, updated; 
    JsonKeys dataString = new JsonKeys(); 

    public AttendanceListAdapter(Context c, ArrayList<JsonKeys> jk) 
    { 
     context = c; 
     adapterkeylist =jk; 
     inflater = LayoutInflater.from(context); 
    } 

    @Override 
    public int getCount() 
    { 
     return adapterkeylist.size(); 

    } 

    @Override 
    public Object getItem(int position) 
    { 

     // return s[s.length/6][s.length%6]; 
     return adapterkeylist.get(position); 
    } 

    @Override 
    public long getItemId(int position) 
    { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     View v = convertView; 


     if (convertView == null) 
      v = inflater.inflate(R.layout.attendance_listrow, null); 

     subject = (TextView) v.findViewById(R.id.subName); 
     subject.setSelected(true); 
     code = (TextView) v.findViewById(R.id.ccode); 
     attended = (TextView) v.findViewById(R.id.subAttended); 
     absent = (TextView) v.findViewById(R.id.subAbsent); 
     percent = (TextView) v.findViewById(R.id.subPercent); 
     updated = (TextView) v.findViewById(R.id.subUpdated); 


     dataString = adapterkeylist.get(position); 

     Log.i("Info Tag Attendance","\n"+dataString.getName()); 

     subject.setText(dataString.getName()); 
     code.setText("Subject Code: " + dataString.getCode()); 
     attended.setText("Classes Attended: " + dataString.getCClass()); 
     absent.setText("Classes Absent: " + dataString.getBunked()); 
     percent.setText("Attendance Percentage: " + dataString.getPercent()); 
     updated.setText("Last Updated: " + dataString.getUpdated()); 

     return v; 

    } 

} 

片段:

public class AttendanceDetailsTabFragment extends Fragment 
{ 
    AttendanceListAdapter adapter; 
    JSONArray ar; 
    JSONObject jobj; 
    ArrayList<JsonKeys> keyslist; 
    JsonKeys jk; 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) 
    { 
     super.onActivityCreated(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 

     View view = inflater.inflate(R.layout.attendance_listview_layout, container, false); 

     keyslist = new ArrayList<JsonKeys>(); 
     String temp = new String(); 

     try 
     { 
      ar = new JSONArray(); 
      ar = GlobalVars.getJSON().getJSONArray("attendanceData"); 

      for (int i = 0; i < ar.length(); i++) 
      { 

       JSONObject jObject = ar.getJSONObject(i); 
       jk = new JsonKeys(); 
       jk.setCode(jObject.getString("ccode")); 
       temp = jObject.getString("cname"); 
       temp = StringEscapeUtils.unescapeHtml4(temp);// To convert HTML 
                   // special chars 
                   // to UniCode 
                   // format; 
       jk.setName(temp); 
       jk.setCClass(jObject.getString("cclass")); 
       jk.setBunked(jObject.getString("bunked")); 
       jk.setPercent(jObject.getString("percent")); 
       jk.setUpdated(jObject.getString("updated")); 
       Log.i("Info Tag Attendance", 
         jk.getCode() + "\n" + jk.getName() + "\n" + jk.getCClass() + "\n" + jk.getBunked() + "\n" + jk.getPercent() + "\n" 
           + jk.getUpdated() + "\n"); 

       keyslist.add(jk); 

      } 

     } catch (JSONException e) 
     { 
      Log.e("Error Tag", "Could Not Get JSON Array"); 
     } finally 
     { 
      Log.i("Info Tag Attendance", "\n" + keyslist.size()); 

     } 

     ListView list = (ListView) view.findViewById(R.id.list); 

     // adapter.notifyDataSetChanged(); 
     adapter = new AttendanceListAdapter(getActivity(), keyslist); 
     list.setAdapter(adapter); 

     if (container == null) 
     { 
      return null; 
     } 

     return view; 
    } 

} 

发生的事情可以在http://postimg.org/image/6qs3oo3hp/

发现正如你可以看到只有最后一个元素被输入到ListView控件的屏幕截图。 任何修补程序将受到欢迎。 我预先设定了代码长度。

+0

什么是JsonKeys和GlobalVars? –

+0

keyslist你检查了列表的大小吗? – Triode

+0

JsonKeys是一个具有setter和getter的全局类,GlobalVars是我存储下载的JSON数据的地方等。 – Hav3n

回答

0

没关系,我只是意识到在全局类(而不是阵列)中设置变量,所以显然只有最后输入的数据被记录(Facepalm)。

愚蠢的错误,将重拍代码使用HashMap。

0

我在Android上同样的问题,

我意识到,我设置listitemclass的变量作为静态的,所以它总是指的是同一个变量时,画面从它的适配器返回。

删除了静态部分,它工作正常

相关问题