Cardslib 的 CardView OnCardClickListener 的 onClick 方法未被调用
Cardslib's CardView OnCardClickListener's onClick method not being called
我在我的应用程序中使用这个库:Card Library : Guide 并创建了一张卡片,如示例所示。
现在我需要处理一个点击事件,但在实例化以下内容时收到错误消息:new Card.OnCardClickListener
,即 OnCardClickListener is abstract: cannot be instantiated
。
在我的 Activity 我有这个代码:
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
怎么了?如何将我的卡片设置为可点击,然后处理 click/touch 事件?
编辑
如果我这样使用它:
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
方法。怎么会?
Card.OnCardClickListener 是一个接口。您必须创建 class 来定义如何使用界面中的函数。试试这个:
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"
。它正在为自己窃取点击。
您必须在 card
(模型)而不是 CardView
(视图)上定义 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);
我找到了错误,但我不知道如何处理。
它位于包含卡片 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 覆盖了整张卡片,当我找到它不在的地方时,它就会检测到我的手指。如果我只添加一张空卡就可以了,但是我应该如何自定义它呢?
这就像有两个视图在彼此之上
我在我的应用程序中使用这个库:Card Library : Guide 并创建了一张卡片,如示例所示。
现在我需要处理一个点击事件,但在实例化以下内容时收到错误消息:new Card.OnCardClickListener
,即 OnCardClickListener is abstract: cannot be instantiated
。
在我的 Activity 我有这个代码:
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
怎么了?如何将我的卡片设置为可点击,然后处理 click/touch 事件?
编辑
如果我这样使用它:
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
方法。怎么会?
Card.OnCardClickListener 是一个接口。您必须创建 class 来定义如何使用界面中的函数。试试这个:
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"
。它正在为自己窃取点击。
您必须在 card
(模型)而不是 CardView
(视图)上定义 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);
我找到了错误,但我不知道如何处理。
它位于包含卡片 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 覆盖了整张卡片,当我找到它不在的地方时,它就会检测到我的手指。如果我只添加一张空卡就可以了,但是我应该如何自定义它呢?
这就像有两个视图在彼此之上