我已經永遠地研究這一點,並不能找到一個解決方案。關於我的自定義列表視圖的一切似乎都正確執行。當我點擊holder.feedUpVoteButton
時,文本正確更改+=1
。但是,當我向下滾動並向上滾動時,文本值將恢復爲單擊之前的值。的TextView值滾動之後又變回以前的值在底座適配器
我拒絕使用notifyDatasetChanged
因爲我不添加任何內容或從列表中刪除任何東西。
public class CustomFeedListViewAdapter extends BaseAdapter{
CustomFeedListViewAdapter customFeedListViewAdapter;
Date createdAt, currentDate; int num;
static HashMap<String, String> oneData = new HashMap<String, String>();
HashMap<String, String> iFeed = new HashMap<>();
private String likesString;
String upVoteClicked, downVoteClicked;
HashMap<String, String> mFeed = new HashMap<>();
List<ParseObject> mObjects;
private ParseObject parseObFeed;
CustomFeedListViewAdapter(Context context, ArrayList<HashMap<String, String>> data) {
super();
this.mContext = context;
GlobalFeedTab.arrayFeedList = data;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return GlobalFeedTab.arrayFeedList.size();
}
@Override
public Object getItem(int i) {
return GlobalFeedTab.arrayFeedList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
likes = new int[GlobalFeedTab.arrayFeedList.size()];
countryNames = new int[GlobalFeedTab.arrayFeedList.size()];
dateNames = new String[GlobalFeedTab.arrayFeedList.size()];
final ViewHolder holder;
if (view == null) {
position = i;
view = inflater.inflate(R.layout.feed_list_row, viewGroup, false);
holder = new ViewHolder();
holder.feedNumOfLikes = (TextView) view.findViewById(R.id.feedNumofLikes);
holder.feedUpVoteButton = (Button) view.findViewById(R.id.feedUpVoteButton);
} else {
position = i;
holder = (ViewHolder) view.getTag();
}
mFeed = GlobalFeedTab.arrayFeedList.get(position);
holder.feedNumOfLikes.setText(mFeed.get("likes"));
likesString = mFeed.get("likes");
likes[position] = Integer.valueOf(likesString);
holder.feedUpVoteButton.setTag(position);
ParseQuery<ParseObject> query2 = new ParseQuery<ParseObject>("FeedItem");
query2.setLimit(250);
query2.addDescendingOrder("createdAt");
query2.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(final List<ParseObject> objects, ParseException e) {
if (e == null) {
for (final ParseObject object : objects) {
holder.feedUpVoteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = (Integer) v.getTag();
parseObFeed = objects.get(pos);
username = parseObFeed.getString("username");
createdAt = parseObFeed.getDate("createdAt");
likes[pos] += 1;
parseObFeed.put("likes", likes[pos]);
holder.feedNumOfLikes.setText(String.valueOf(parseObFeed.getInt("likes")));
parseObFeed.put(ParseUser.getCurrentUser().getUsername() + "upvoteClicked", true);
parseObFeed.saveInBackground();
}
});
}
});
return view;
}
private class ViewHolder {
ImageView feedProfilePic;
TextView feedUsername;
TextView feedNumOfLikes;
TextView feedFeedItem;
TextView feedDate;
TextView feedNumofReplies;
Button feedUpVoteButton;
Button feedDownVoteButton;
Button feedCommentButton;
ListView feedListView;
}
}
鏈接給我指導,但是,我仍然感到困惑如何使用'BaseAdapter'實現這一點。你能提供一個答案@ArpanSharma – grant