Ho un singolo CardView che contiene due TextViews e due ImageViews. Voglio essere in grado di scorrere verso sinistra e destra per "respingere". In realtà voglio scorrere verso destra per inviare un Intent, ma ciò può essere fatto in seguito. Per ora, voglio essere in grado di chiudere il CardView facendo scorrere verso sinistra o verso destra. Voglio anche l'animazione dello swiping.Come aggiungere la funzionalità di scorrimento su Android CardView?
Ho provato a utilizzare romannurik's SwipeDismissTouchListener
ma CardView non risponde allo scorrimento.
Se qualcuno ha una soluzione migliore del listener personalizzato romannurik's
, si prega di condividere.
Ecco il mio layout a schede:
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/generate"
map:cardCornerRadius="@dimen/_3sdp"
map:cardElevation="@dimen/_8sdp"
android:id="@+id/restaurantContainer">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/thumbnail"
android:layout_width="@dimen/_75sdp"
android:layout_height="@dimen/_75sdp"
android:layout_margin="@dimen/_5sdp" />
<ImageView
android:id="@+id/rating"
android:layout_width="@dimen/_75sdp"
android:layout_height="@dimen/_15sdp"
android:layout_margin="@dimen/_5sdp" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/_5sdp"
android:gravity="top"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/categories"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="@dimen/_5sdp"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
map:cameraZoom="14"
map:liteMode="true"
map:mapType="normal" />
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
Come ho configurato lo SwipeDismissTouchListener:
RelativeLayout rootLayout;
CardView restaurantCardView;
...
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootLayout = (RelativeLayout) inflater.inflate(R.layout.fragment_main, container, false);
restaurantCardView = (CardView) rootLayout.findViewById(R.id.restaurantContainer);
restaurantCardView.setOnTouchListener(new SwipeDismissTouchListener(restaurantCardView, null, new SwipeDismissTouchListener.DismissCallbacks() {
@Override
public boolean canDismiss(Object token) {
Log.d("Chris", "canDismiss() called with: " + "token = [" + token + "]");
return true;
}
@Override
public void onDismiss(View view, Object token) {
Log.d("Chris", "onDismiss() called with: " + "view = [" + view + "], token = [" + token + "]");
}
}));
....
return rootLayout;
sono in grado di visualizzare il registro da canDismiss(...)
ma non da onDismiss(...)
.
Impressionante, ho apprezzo davvero la tua risposta dettagliata. Ho una domanda: visto che uso solo un CardView, qual è il modo migliore per creare il 'RestaurantCardAdapter'? Tutti gli esempi online sono per gli elenchi. C'è qualcosa che dovrei fare in particolare? Non voglio rimanere bloccato da qualche parte e passare il mio tempo a cercare di correggere stupidi errori haha. – ctzdev
@ChrisTarazi Ho aggiornato la risposta con Adapter & ViewHolder che ho usato per testare l'idea. In bocca al lupo! Qualsiasi domanda - basta chiedere –
Ho problemi con 'onCreateViewHolder (...)'. Penso che dobbiamo gonfiare una vista basata su ciò che ho visto online. Perché in 'onBindViewHolder (...)', il mio riferimento a 'TextViewHolder' per' TextViews' e 'ImageViews' sono' null'.Quindi ci deve essere qualcosa con le opinioni che ci stanno perdendo. – ctzdev