如何为新添加的元素维护数组列表?

时间:2013-10-25 07:48:53

标签: android facebook

大家好我正在使用的应用程序类似于facebook。在目前我被困在一个点,就像我们在Facebook上的帖子显示在我们的墙上所有的帖子都是散装显示像20 20时尚,我想在我的应用程序中应用同样的东西。对于那件事我使用listview获取值表单服务器并创建视图根据我也获得所有值,但问题是,当我添加第一个20值然后它工作正常,但当我添加另一个20值时,它将删除以前的数据在列表视图中。

任何想法如何在我的应用程序中做这件事并提前感谢....

我的函数从服务器获取值

private void getPostnew(String start) {

        String URL = start;

        System.out.println("start value new :" + start);

        final String usernamefor = "";

        aq = new AQuery(getParent());
        listitem = new ArrayList<BeanTop>();
        aq.ajax(URL, JSONObject.class, 10 * 1000,
                new AjaxCallback<JSONObject>() {

                    @Override
                    public void callback(String url, JSONObject json1,
                            AjaxStatus status) {

                        System.out.println("json " + json1);

                        if (json1 == null) {

                        } else {

                            try {

                                JSONArray jarray = json1
                                        .getJSONArray("subject");

                                for (int j = 0; j < jarray.length(); j++) {
                                    try {
                                        JSONObject j1 = jarray.getJSONObject(j);

                                        try {

                                            listcount = j1
                                                    .getString("likecount");

                                        } catch (Exception e) {
                                            listcount = "0";

                                        }

                                        AddObject(j1.getString("text"),
                                                j1.getString("leftpic"),
                                                j1.getString("rightpic"),
                                                j1.getString("rightvotecount"),
                                                j1.getString("leftvotecount"),
                                                j1.getString("textleft"),
                                                j1.getString("textright"),
                                                j1.getString("date_created"),
                                                j1.getString("voteid"),
                                                j1.getString("user"),
                                                j1.getString("dom"),
                                                j1.getString("Isvoted"),
                                                j1.getString("Islike"),
                                                j1.getString("profilepic"),
                                                listcount,
                                                j1.getString("commentcount"));

                                    } catch (Exception e) {

                                        e.printStackTrace();
                                    }

                                }
                            } catch (Exception e) {

                                e.printStackTrace();
                            }

                        }

                        FriendlistAdapter ad = new FriendlistAdapter(Top.this,
                                listitem);
                        subjectlist.setAdapter(ad);
                        ad.notifyDataSetChanged();

                    }

                });

    }

在bean类中保存数据的方法

private void AddObject(String string1, String string2, String string3,
            String string5, String string6, String string7, String string8,
            String string9, String string10, String string11,
            String usernamefor, String isvoted, String isliked,
            String profilepic, String likecount, String commentcount) {

        BeanTop ib = new BeanTop();

        Date date = null;
        try {
            System.out.println("date " + string9);
            date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(string9);
        } catch (Exception e) {

            e.printStackTrace();
        }

        ib.setText(string1);
        ib.setLeftpic(string2);
        ib.setRightpic(string3);
        ib.setRightVote(string5);
        ib.setLeftVote(string6);
        ib.setLefttext(string7);
        ib.setRighttext(string8);
        ib.setDate(string9);
        ib.setDate1(date);
        ib.setVoteid(string10);
        ib.setUsername(string11);
        ib.setDom(usernamefor);
        ib.setIsvoted(isvoted);
        ib.setIsliked(isliked);
        ib.setProfilepic(profilepic);
        ib.setLikecount(likecount);
        ib.setCommentcount(commentcount);
        List<BeanTop> bookingList = new ArrayList<BeanTop>();
        bookingList.addAll(listitem);
        Collections.sort(bookingList, new Comparator<BeanTop>() {
            public int compare(BeanTop m1, BeanTop m2) {
                return m1.getDate().compareTo(m2.getDate());
            }
        });
        Collections.reverse(bookingList);

        try {
        listitem.clear();

        } catch (Exception e) {

            e.printStackTrace();
        }
        listitem.addAll(bookingList);
        try {
            bookingList.clear();

        } catch (Exception e) {

            e.printStackTrace();
        }

        listitem.add(ib);

    }

3 个答案:

答案 0 :(得分:0)

不能看到你的代码,但我可以告诉你这样做的一般方法......

首先,您应该维护一个列表,比如在类级别... ...

List<MyPost> posts = ArrayList<MyPost>();

然后,您可以通过在其中传递“帖子”列表来创建适配器。

每次从服务器获取项目时,只需将“.addAll(xxx)”调用到“帖子”列表,

posts.addAll(newItems);

然后,调用yourAdapter.notifyDatasetChanged();,以便列表可以重绘/更新其视图...

在你的代码中......使用,

if (listitem == null) {
  listitem = new ArrayList<BeanTop>();
}

在你的getPostnew()中,而不仅仅是listitem = new ArrayList<BeanTop>();

希望这会有所帮助......

答案 1 :(得分:0)

每次调用listitem = new ArrayList<BeanTop>();方法时,您都在重新初始化getPostnew。这就是你的旧帖子丢失的原因。尝试将该行更改为:

    if (listitem == null) {
        listitem = new  ArrayList<BeanTop>();
    }

答案 2 :(得分:0)

您应该使用全局变量来存储您在方法中从服务器获取的数据  每次执行getPostnew(String start)时,都会重新创建listitem;因此最后的数据将会丢失。