首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义BaseAdapter仅向ListView添加最后一个元素

自定义BaseAdapter仅向ListView添加最后一个元素
EN

Stack Overflow用户
提问于 2013-04-12 22:37:16
回答 2查看 778关注 0票数 1

我设计了一个自定义的BaseAdapter,它接受一个类的ArrayList (JsonKeys),其中包含我需要的数据的getter和setter。

我基本上解析了一个JSON数组,并将适当的数据插入到列表中,如下所示:

代码语言:javascript
复制
"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类和扩展列表视图的片段。

代码语言:javascript
复制
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;

    }

}

片段:

代码语言:javascript
复制
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中。任何修复都将受到欢迎。我提前为代码长度进行了申请。

EN

回答 2

Stack Overflow用户

发布于 2013-04-12 23:02:31

不要紧,我只是意识到在全局类(而不是数组)中设置变量,所以显然只记录最后输入的数据(Facepalm)。

愚蠢的错误,将使用HashMap重新编写代码。

票数 0
EN

Stack Overflow用户

发布于 2013-07-20 03:12:59

我在android上也遇到了同样的问题,

我意识到我将listitemclass的变量设置为静态,这样当view从它的适配器返回时,它总是引用相同的变量。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15974195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档