У меня есть пользовательское представление под названием TinderStackLayout
. В определенной части кода я удаляю дочерний вид и снова добавляю его в последнюю возможную позицию -
private void handleViewAfterAnimation(View view, boolean shouldSkipView) {
Log.d("card view - ", "inside handleViewAfterAnimation");
isCardAnimating = false;
TinderStackLayout tinderStackLayout = (TinderStackLayout) view.getParent();
if (tinderStackLayout == null)
return;
tinderStackLayout.removeView(view);
if (shouldSkipView)
tinderStackLayout.addCard((TinderCardView) view, tinderStackLayout.getChildCount() - 1);
//this part is for debugging purpose
for (int i = 0; i < tinderStackLayout.getChildCount(); i++) {
View childAt = tinderStackLayout.getChildAt(i);
if (childAt instanceof TinderCardView)
Log.d("card view - ", "child cards after deletion - " + (((TinderCardView) childAt).usernameTextView.getText()));
}
}
, вот мой метод addCard()
-
public void addCard(TinderCardView tinderCardView, int addToPosition) {
View topCard = getChildAt(0);
if (topCard != null && topCard.equals(tinderCardView)) {
return;
}
topCardOnStack = tinderCardView;
ViewGroup.LayoutParams layoutParams;
layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
addView(tinderCardView, addToPosition, layoutParams);
// tinderCardView.animate()
// .x(0)
// .setInterpolator(new AnticipateOvershootInterpolator());
}
Что я не понимаю, так это то, что я получаю в интерфейсе - у меня есть 3 карты. Я нажимаю кнопку, одна карта анимируется, вторая показывается. Я снова нажимаю кнопку, второй оживляет прочь. Я нажимаю последний и кнопка больше не работает. Чего я хочу добиться, так это первой карты, появившейся теперь за последней.
Вот что я получаю при выводе значений -
кажется правильным, это было до нажатия 3 2 1, а теперь 2 3 1. Следующим должно быть 1 2 3, но это то, что я получаю для следующего -
восходит к 3 2 1 вместо 1 2 3. Я не могу понять, почему. ?
Редактировать:
нашел причину, по которой это происходит, я даю представление, которое всегда должно быть главной картой в стеке, но на самом деле я не даюверхняя карта, потому что я всегда добавляю новую карту. Вот метод -
public void handleButtonPressed(int buttonTag) {
Log.d("card view - ", "inside handleButtonPressed");
TinderStackLayout tinderStackLayout = ((TinderStackLayout) this.getParent());
TinderCardView topCard = (TinderCardView) tinderStackLayout.getChildAt(tinderStackLayout.getChildCount() - 1);
if (isCardAnimating) {
return;
}
switch (buttonTag) {
case DELETE_BUTTON_PRESSED:
isCardAnimating = true;
deleteCard(topCard);
break;
case PASS_BUTTON_PRESSED:
Log.d("card view - ", "inside pass button pressed");
isCardAnimating = true;
passCard(topCard);
Log.d("card view - ", "top card Value before pass - " + topCard.displayNameTextView.getText());
Log.d("card view - ", "child count - " + tinderStackLayout.getChildCount());
for (int i = 0; i < tinderStackLayout.getChildCount(); i++) {
View childAt = tinderStackLayout.getChildAt(i);
if (childAt instanceof TinderCardView)
Log.d("card view - ", "child cards before deletion - " + (((TinderCardView) childAt).usernameTextView.getText()));
}
break;
case APPROVE_BUTTON_PRESSED:
showLawyerContactDetailsFragment(topCard);
break;
}
}
Я пытаюсь сделать TinderCardView topCard = (TinderCardView) tinderStackLayout.getChildAt(tinderStackLayout.getChildCount() - 1)
, чтобы получить верхнюю карту в моем стеке, что было бы правильно, если бы я удалил карты и не добавил их в свою карту. стек, но это не тот случай, когда их добавление. Каким должно быть решение, чтобы всегда получать верхнюю карту, когда я постоянно добавляю новые просмотры?