2014-12-17 3 views
0

У меня проблема с логикой.Проверка флажков в Custom Listview From Parse.com

Я получаю данные от Parse.com, и мне нужно отмечать флажки, как отмечено, если текущий пользователь любит карту.

Все работает нормально, но у меня есть для прокрутки вниз и вверх, чтобы изменить состояние флажков

вот мой код

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); 
 
    } 
 

 
}

+0

Если я хочу понять ваш код правильно, ты устанавливая, будет ли он проверен после заполнения вашего адаптера и привязки его к списку, поэтому вам нужно прокрутить, потому что он должен получить новое представление, чтобы оно было обновлено. –

+0

Если list.get (0) .setSelected (true); он отлично работает, независимо от того, сколько я добавляю! –

ответ

0

Понял.

Во второй выборки запросов нравится пользователем я использовал

likesQuery.find();

Вместо

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

 Смежные вопросы

  • Нет связанных вопросов^_^