我在我的应用中使用此库:Card Library : Guide并创建了一张卡片,如示例所示。
现在我需要处理click事件,但在实例化以下内容时收到错误: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)
EDIT1
你们是对的,我在卡片上设置了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
方法。怎么样?
答案 0 :(得分: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 Interfaces?
修改强>
此外,从卡中包含的RelativeLayout中删除android:clickable="true"
。它为自己窃取了点击次数。
答案 1 :(得分: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覆盖了整张卡片,而当我找到一个不存在的地方时,它会检测到我的手指。如果我只添加一张空卡,它可以工作,但我该如何定制呢?
这就像在彼此之上有两个视图
答案 2 :(得分:1)
您必须在card
(模型)上定义clickListener而不是CardView
(查看)
//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);