【问题标题】:Android Tinder like swipeable-card setOnCardDismissedListenerAndroid Tinder 类似 swipeable-card setOnCardDismissedListener
【发布时间】:2014-08-13 20:53:25
【问题描述】:

我正在尝试制作类似火种的可刷卡。我有这个库https://github.com/kikoso/Swipeable-Cards。我跟着演示,它工作正常。但是demo中只有一个cardModel要设置在carddismissedlisterner上。如何让适配器中的所有 cardModels 工作?我想在关闭后获取每个cardModel的信息(例如标题、文本)

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

/****************** 更新********************** */ 我尝试在我所有的 cradModels 上重复 setOnCardDismissedListener。如果是 onLike,我想保存 cardModel 的标题。但是,我检查了我的数据库,我确实保存了两次,但两个标题都是“title2”,我想知道为什么“title1”没有保存。

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

【问题讨论】:

    标签: android onclicklistener cardlayout


    【解决方案1】:

    只需在所有卡型号上重复 setOnCardDimissedListener

    如果界面返回某种标记,您可以为所有卡模型设置一个OnCardDimissedListener,但不幸的是,如果您这样做,您将无法知道对哪张卡进行了操作。

    您需要在您创建的每个卡片模型上设置不同的 OnCardDimissedListener 实例。

    编辑 - 你有没有看 github 页面?

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

    创建OnCardDimissedDelegate 的类实例并将其设置在每张卡片上。

    【讨论】:

    • 您好,感谢您的快速回复。 OnCardDimissedDelegate 似乎是一个旧代码,我认为所有者将其更改为 OnCardDimissedListener。此外,我尝试在所有卡片模型上重复 setOnCardDimissedListener。但它仍然适用于第一个。例如,我创建 cardModel1、cardModel2、title1、title2。在 onLike 函数中,我已将标题保存在数据库中。但是,仅保存标题 2。和建议?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2020-07-21
    • 1970-01-01
    • 2015-05-28
    相关资源
    最近更新 更多