简体   繁体   中英

Checking Checkboxes In Custom Listview From Parse.com

i'm facing a problem of logic.

I'm getting data from Parse.com and i need to mark checkboxes as checked if the current user is liking a card.

Everything works fine but i have to scroll down and up to change the status of the checkboxes

here is my code

 public class CardsFragment extends ListFragment { public static final String TAG = CardsFragment.class.getSimpleName(); protected List<ParseObject> mCards; protected ParseRelation<ParseObject> mUserCategoriesRelation; protected ParseRelation<ParseObject> mCardsLikeRelation; protected ParseUser mCurrentUser; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_cards, container, false); return rootView; } @Override public void onResume() { super.onResume(); getActivity().setProgressBarIndeterminateVisibility(true); final List<CardModel> list = new ArrayList<CardModel>(); mCurrentUser = ParseUser.getCurrentUser(); mCardsLikeRelation = mCurrentUser.getRelation("cardLikesRelation"); mUserCategoriesRelation = mCurrentUser.getRelation(ParseConstants.KEY_CATEGORIES_RELATION); ParseQuery<ParseObject> query = ParseQuery.getQuery(ParseConstants.CLASS_CARD); query.whereEqualTo(ParseConstants.KEY_DELETED, false); query.orderByDescending(ParseConstants.KEY_CREATED_AT); query.findInBackground(new FindCallback<ParseObject>() { @Override public void done(List<ParseObject> cards, ParseException e) { getActivity().setProgressBarIndeterminateVisibility(false); if (e == null) { mCards = cards; for (final ParseObject card : mCards) { list.add(get(card.getString("title"), card.getString("content"), card.getString("background"), card.getBoolean("background_image"),card.getInt("likes"))); } if (getListView().getAdapter() == null) { ArrayAdapter<CardModel> adapter = new CardAdapter(getListView().getContext(), list); setListAdapter(adapter); } else { //refill the adapter ((CardAdapter) getListView().getAdapter()).refill(list); } int i = 0; for (final ParseObject card : mCards) { ParseQuery<ParseObject> likesQuery = mCardsLikeRelation.getQuery(); likesQuery.whereEqualTo("objectId", card.getObjectId()); final int finalI = i; likesQuery.findInBackground(new FindCallback<ParseObject>() { @Override public void done(List<ParseObject> likes, ParseException e) { if (e == null) { //list returned - look for a match Log.e(TAG, "likes" + likes.size()); if (likes.size() == 1) { //liked list.get(finalI).setSelected(true); } } else { Log.e(TAG, e.getMessage()); } } }); i++; } } else { Log.d(TAG, "Error: " + e.getMessage()); AlertDialog.Builder builder = new AlertDialog.Builder(getListView().getContext()); builder.setMessage(e.getMessage()) .setTitle(R.string.error_title) .setPositiveButton(android.R.string.ok, null); AlertDialog dialog = builder.create(); dialog.show(); } } }); } private CardModel get(String title, String content, String background, boolean background_image, int likes) { return new CardModel(title, content, background, background_image, likes); } } 

Got it.

In the second query fetching likes by user i used

 likesQuery.find(); 

Instead of

 likesQuery.findInBackground(new FindCallback<ParseObject>() {}); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM