Reputation: 991
I am trying to make a tinder-like swipeable-card. I have this library https://github.com/kikoso/Swipeable-Cards. I followed the demo and it works fine. However, the demo only has one cardModel to be setoncarddismissedlisterner. How can I have all cardModels in the adapter work? I wanna get every cardModel's info (e.g. Title, text) after it's dismissed
private CardContainer mCardContainer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.mainlayout);
mCardContainer = (CardContainer) findViewById(R.id.layoutview);
Resources r = getResources();
SimpleCardStackAdapter adapter = new SimpleCardStackAdapter(this);
adapter.add(new CardModel("Title1", "Description goes here", r.getDrawable(R.drawable.picture1)));
adapter.add(new CardModel("Title2", "Description goes here", r.getDrawable(R.drawable.picture2)));
adapter.add(new CardModel("Title3", "Description goes here", r.getDrawable(R.drawable.picture3)));
adapter.add(new CardModel("Title4", "Description goes here", r.getDrawable(R.drawable.picture1)));
adapter.add(new CardModel("Title5", "Description goes here", r.getDrawable(R.drawable.picture2)));
adapter.add(new CardModel("Title6", "Description goes here", r.getDrawable(R.drawable.picture3)));
adapter.add(new CardModel("Title1", "Description goes here", r.getDrawable(R.drawable.picture1)));
CardModel cardModel = new CardModel("Title1", "Description goes here", r.getDrawable(R.drawable.picture1));
String title = cardModel.getTitle();
cardModel.setOnClickListener(new CardModel.OnClickListener() {
@Override
public void OnClickListener() {
Log.i("Swipeable Cards","I am pressing the card");
}
});
cardModel.setOnCardDimissedListener(new CardModel.OnCardDimissedListener() {
@Override
public void onLike() {
Log.i("Swipeable Cards","I like the card");
datasource.createComment(title);
}
@Override
public void onDislike() {
Log.i("Swipeable Cards","I dislike the card");
datasource.deleteComment(title);
}
});
adapter.add(cardModel);
mCardContainer.setAdapter(adapter);
}
/****************** Update ******************/ I tried repeating setOnCardDismissedListener on all my cradModels. I wanna save the title of the cardModel if is onLike. However, I checked my database, I did save it twice but both titles are "title2", I wonder why "title1" isn't saved.
CardModel cardModel1 = new CardModel("Title1", "Description goes here",
r.getDrawable(R.drawable.picture1));
final String title1 = cardModel1.getTitle();
CardModel cardModel2 = new CardModel("Title2", "Description goes here",
r.getDrawable(R.drawable.picture1));
final String title2 = cardModel2.getTitle();
adapter.add(cardModel1);
adapter.add(cardModel2);
cardModel1.setOnClickListener(new CardModel.OnClickListener() {
@Override
public void OnClickListener() {
Log.i("Swipeable Cards", "I am pressing the card");
}
});
cardModel1
.setOnCardDimissedListener(new CardModel.OnCardDimissedListener() {
// onLike swipe to left, but we want it to be removed
@Override
public void onLike() {
Log.i("Swipeable Cards", "I like the card");
datasource.createComment(title1);
}
// disLike swipe to right, but we want it to be saved
@Override
public void onDislike() {
Log.i("Swipeable Cards", "I dislike the card");
}
});
cardModel2.setOnClickListener(new CardModel.OnClickListener() {
@Override
public void OnClickListener() {
Log.i("Swipeable Cards", "I am pressing the card");
}
});
cardModel2
.setOnCardDimissedListener(new CardModel.OnCardDimissedListener() {
// onLike swipe to left, but we want it to be removed
@Override
public void onLike() {
Log.i("Swipeable Cards", "I like the card");
datasource.createComment(title2);
}
// disLike swipe to right, but we want it to be saved
@Override
public void onDislike() {
Log.i("Swipeable Cards", "I dislike the card");
}
});
Upvotes: 1
Views: 3828
Reputation: 3771
Just repeat that setOnCardDimissedListener
on all your card models.
If the interface returned some sort of token, you could set a single OnCardDimissedListener
for ALL the card models, but unfortunately if you do that, youll have no way of knowing which card was acted upon.
You will need to have a different OnCardDimissedListener
instance set on each of the cardmodels you create.
Edit - did you even look at the github page?
Additionally, you can set up a Delegate to be notified when the image is being liked or disliked:
card.setOnCardDimissedDelegate(new CardView.OnCardDimissedDelegate() {
@Override
public void onLike(CardView cardView) {
Log.d("Swipeable Card", "I liked it");
}
@Override
public void onDislike(CardView cardView) {
Log.d("Swipeable Card", "I did not liked it");
}
});
create a class instance of that OnCardDimissedDelegate
and set it on each of the cards.
Upvotes: 1