-3

こんにちは、私はFacebookに似たアプリに取り組んでいます.現在、Facebookに投稿があり、すべての投稿が20 20ファッションのようにまとめて表示されているという点で、私はある点で立ち往生しています.アプリに適用したいもの。そのために、サーバーから値を取得し、それに応じてビューを作成するリストビューを使用しますが、すべての値も取得しますが、問題は、最初の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);

    }
4

3 に答える 3

0

グローバル変数を使用して、サーバーから取得したデータを保存する必要があります。メソッド getPostnew(String start)を実行するたびに、メソッドlistitemが再作成されるため、最後のデータが失われます。

于 2013-10-25T08:15:35.377 に答える
0

あなたのコードを見ずに言うことはできませんが、これを行う一般的な方法を示すことができます...

まず、リストを維持する必要があります。たとえば、クラスレベルで...

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

次に、「posts」リストを渡すことでアダプターを作成できます。

そして、サーバーからアイテムを取得するたびに、「投稿」リストに「.addAll(xxx)」を呼び出すだけです。

posts.addAll(newItems);

その直後に、yourAdapter.notifyDatasetChanged();リストがそのビューを再描画/更新できるように呼び出します...

そして、あなたのコードで...使用、

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

だけではなく getPostnew() でlistitem = new ArrayList<BeanTop>();

お役に立てれば...

于 2013-10-25T08:01:47.247 に答える