2

我在我的应用程序中使用这个库:卡片库:指南并创建了一张卡片,如示例所示。现在我需要处理一个单击事件,但是在实例化以下内容时收到错误:new Card.OnCardClickListener,其中说OnCardClickListener is abstract: cannot be instantiated. 在我的活动中,我有以下代码:

    Card card = new Card(getBaseContext());//getContext()
    CardHeader header = new CardHeader(getBaseContext());
    card.addCardHeader(header);
    final CardViewNative cardView = (CardViewNative) findViewById(R.id.carddemo);
    cardView.setCard(card);

    cardView.setClickable(true);
    cardView.setOnClickListener(new Card.OnCardClickListener()); //error here

怎么了?如何将我的卡片设置为可点击,然后处理点击/触摸事件?

编辑

如果我这样使用它:

cardView.setOnClickListener(new Card.OnCardClickListener(){//error here
        @Override
        public void onClick(Card card, View view) {
            // This will execute when the the card is clicked
        }
    });

它说cannot resolve method setOnClickListener(it.gmariotti.cardslib.library.internal.Card.OnCardClickListener)

编辑1

各位是对的,我setOnClickListener在卡片上自己设置了,现在没有错误了, 但是点击卡片时它仍然没有执行任何操作。这是新代码:

     //Create a Card
    Card card = new Card(this);//getContext()

    //Create a CardHeader
    CardHeader header = new CardHeader(this);
    //....
    //Add Header to card
    card.addCardHeader(header);

    //Set card in the cardView
    CardViewNative cardView = (CardViewNative) this.findViewById(R.id.carddemo);
    cardView.setCard(card);

    card.setClickable(true);
    card.setOnClickListener(new Card.OnCardClickListener(){
        @Override
        public void onClick(Card card, View view) {
            // This will execute when the the card is clicked
            Toast.makeText(CardMariotti.this,"Clickable card", Toast.LENGTH_LONG).show();
        }
    });

我进行了调试,但onClick从未调用过该方法。怎么来的?

4

3 回答 3

3

Card.OnCardClickListener 是一个接口。您必须创建定义如何使用接口中的函数的类。尝试这个:

card.setOnClickListener(new Card.OnCardClickListener() {
    @Override
    public void onClick(Card card, View view) {
        // This will execute when the the card is clicked
    }
});

答案来源:https ://github.com/gabrielemariotti/cardslib/blob/master/doc/CARD.md#clickable-card

Java 接口信息:Java 接口?

编辑

此外,android:clickable="true"从卡片包含的 RelativeLayout 中删除。它正在为自己窃取点击。

于 2015-04-28T18:01:32.353 回答
2

我发现了错误,但我不知道如何处理它。它位于包含卡片的布局中,cardslib_item_card.xml. 如果我删除我添加的所有内容并保留它:

<it.gmariotti.cardslib.library.view.CardViewNative     xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card="http://schemas.android.com/apk/res-auto"
    card:card_layout_resourceID="@layout/native_card_layout"
    style="@style/native_recyclerview_card.base"
    card_view:cardCornerRadius="4dp"
    android:id="@+id/carddemo"
    android:layout_marginTop="12dp"
    android:layout_width="match_parent" android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:layout_marginLeft="12dp" android:layout_marginRight="12dp">

然后卡片被点击,但如果尝试对其进行个性化设置,例如添加一个相对布局,如下所示:

<it.gmariotti.cardslib.library.view.CardViewNative     
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card="http://schemas.android.com/apk/res-auto"
    card:card_layout_resourceID="@layout/native_card_layout"
    style="@style/native_recyclerview_card.base"
    card_view:cardCornerRadius="4dp"
    android:id="@+id/carddemo"
    android:layout_marginTop="12dp"
    android:layout_width="match_parent" android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:layout_marginLeft="12dp" android:layout_marginRight="12dp">

    <RelativeLayout android:id="@+id/cardlayout"
        android:layout_width="match_parent" android:layout_height="match_parent"
        android:background="?android:selectableItemBackground"              
        android:clickable="true">
    <!-- layout containing 3 TextViews -->
    </RelativeLayout>
</it.gmariotti.cardslib.library.view.CardViewNative>

然后卡片不再被点击。更准确地说,它有时会被点击,就好像RelativeLayout 覆盖了整张卡片,当我找到它不在的地方时,它会检测到我的手指。如果我只添加一张空卡,它就可以工作,但是我应该如何自定义它呢?

就像在彼此之上有两个视图

于 2015-04-30T13:55:23.903 回答
1

您必须在card(model) 而不是CardView(view)上定义 clickListener

//Set onClick listener
card.setOnClickListener(new Card.OnCardClickListener() {
            @Override
            public void onClick(Card card, View view) {
                Toast.makeText(getActivity(),"Clickable card", Toast.LENGTH_LONG).show();
            }
        });

同时你应该使用:

   //it is not necessary if you define a ClickListener on the card
   card.setClickable(true);  

顺便说一句,您还应该在以下内容中使用类似的东西Activity

Card card = new Card(this);
于 2015-04-28T18:09:09.427 回答