ListView中的单选按钮回收并导致问题

时间:2015-05-21 22:43:49

标签: android listview parse-platform

所以我有一个listview,它可以让列表中的每个视图都有2个单选按钮。问题是当列表比列表开始回收视图的页面更长时,它还会带有选中的单选按钮。我明白是什么导致了这个问题,但我真的不知道如何解决这个问题,而且我在网上看到的答案并没有真正起作用。我的问题有点独特,因为我正在使用Parse和我的适配器,因此查找专门用于解析的解决方案非常困难。

这是我的适配器的代码:

    // Set up a customized query
    ParseQueryAdapter.QueryFactory<AnywallPost> factory =
            new ParseQueryAdapter.QueryFactory<AnywallPost>() {
                public ParseQuery<AnywallPost> create() {
                    Location myLoc = (currentLocation == null) ? lastLocation : currentLocation;
                    ParseQuery<AnywallPost> query = AnywallPost.getQuery();
                    query.include("user");
                    query.orderByDescending("PostScore");
                    query.whereWithinKilometers("location", geoPointFromLocation(myLoc), radius
                            * METERS_PER_FEET / METERS_PER_KILOMETER);
                    query.setLimit(MAX_POST_SEARCH_RESULTS);
                    return query;
                }
            };

    // Set up the query adapter
    postsQueryAdapter = new ParseQueryAdapter<AnywallPost>(this, factory) {
        @Override
        public View getItemView(AnywallPost post, View view, ViewGroup parent) {
            if (view == null) {
                view = View.inflate(getContext(), R.layout.anywall_post_item, null);
            }
            //TextView DetailsView = (TextView) view.findViewById(R.id.content_view);
            TextView contentView = (TextView) view.findViewById(R.id.content_view);
            TextView usernameView = (TextView) view.findViewById(R.id.username_view);
            TextView postscoreView = (TextView) view.findViewById(R.id.PostScore);
            RadioButton upvote = (RadioButton) view.findViewById(R.id.Upvote);
            RadioButton downvote = (RadioButton) view.findViewById(R.id.DownVote);

            //DetailsView.setText(post.getDetails());
            contentView.setText(post.getText());
            usernameView.setText(post.getUser().getUsername());
            postscoreView.setText(post.getInt().toString());


            upvote.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    post.increment("PostScore", 1);
                    post.saveInBackground();
                }
            });

            downvote.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //post.decrement();
                }
            });


            return view;
        }
    };

    postsQueryAdapter.setAutoload(false);

    postsQueryAdapter.setPaginationEnabled(false);

    // Attach the query adapter to the view
    ListView postsListView = (ListView) findViewById(R.id.posts_listview);
    postsListView.setAdapter(postsQueryAdapter);

所以我需要这两个单选按钮来保留整个时间的帖子,但我仍然是初学者,所以我不完全确定我会怎么做。谁能提供解决方案并解释它是如何工作的?如果您需要更多代码,请告诉我。谢谢你的时间。

2 个答案:

答案 0 :(得分:0)

基本上当你得到一个新的单元格时,一定要清除两个单选按钮,然后只有当它符合你要检查它的条件时才重新检查它们(可能检查post对象上的计数) 。如果不了解更多关于如何存储数据的信息,很难确切地说出它的外观,但我猜这样的事情:

upvote.setChecked(post.getInt() > 0);
downvote.setChecked(post.getInt() < 0);

答案 1 :(得分:0)

除了列表项之外,我还带有一个带有单选按钮状态的列表。 因此,即使视图被回收,您也可以使用自己的状态来检查正确的单选按钮。

一个很好的选择是布尔列表(布尔包装器)。你可以为upvote保持正确,对downvote保持为false,对于novote保持为null。