所以我有一个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);
所以我需要这两个单选按钮来保留整个时间的帖子,但我仍然是初学者,所以我不完全确定我会怎么做。谁能提供解决方案并解释它是如何工作的?如果您需要更多代码,请告诉我。谢谢你的时间。
答案 0 :(得分:0)
基本上当你得到一个新的单元格时,一定要清除两个单选按钮,然后只有当它符合你要检查它的条件时才重新检查它们(可能检查post
对象上的计数) 。如果不了解更多关于如何存储数据的信息,很难确切地说出它的外观,但我猜这样的事情:
upvote.setChecked(post.getInt() > 0);
downvote.setChecked(post.getInt() < 0);
答案 1 :(得分:0)
除了列表项之外,我还带有一个带有单选按钮状态的列表。 因此,即使视图被回收,您也可以使用自己的状态来检查正确的单选按钮。
一个很好的选择是布尔列表(布尔包装器)。你可以为upvote保持正确,对downvote保持为false,对于novote保持为null。