Android: scroll list item calls clickOnItem

I want to scroll to the right and left of my list item. For this I am using this project.

https://github.com/daimajia/AndroidSwipeLayout I can drag and drop elements, but when I missed the element, will call the element onclick. I do not want it. I put effort into SwipeListener, but I was not able to completely overcome this situation. I can scroll left-right without calling onClickItem, but when I scroll back itemClick call

swipeLayout.addSwipeListener(new SwipeLayout.SwipeListener() {
            @Override
            public void onStartOpen(SwipeLayout swipeLayout) {
                lineIsClose = false;
            }

            @Override
            public void onOpen(SwipeLayout swipeLayout) {

                lineIsClose = false;
            }

            @Override
            public void onStartClose(SwipeLayout swipeLayout) {
                lineIsClose = false;
            }

            @Override
            public void onClose(SwipeLayout swipeLayout) {
                lineIsClose  = true ;
            }

            @Override
            public void onUpdate(SwipeLayout swipeLayout, int i, int i1) {
            }

            @Override
            public void onHandRelease(SwipeLayout swipeLayout, float v, float v1) {
            }
        });

      

enter image description here

EDIT: some code

adapter = new ProductsListAdapter(getActivity(), currentList);
            adapter.setMode(Attributes.Mode.Multiple);
            listView.setAdapter(adapter); 

      


package com.akakce.market.Adapters;

import android.content.Context;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.adapters.BaseSwipeAdapter;
import com.akakce.market.Models.ProductList;
import com.akakce.market.Managers.SharedPrefManager;
import com.akakce.market.Models.Product;
import com.akakce.market.R;
import com.akakce.market.Utils.GifMovieView;

import java.util.List;

/**
 * Created by cuneyt on 1.7.2015.
 */
public class ProductsListAdapter extends BaseSwipeAdapter {

    Context mContext;
    List<Product> list;
    ProductList currentList;
    boolean lineIsClose = true;
    public ProductsListAdapter(Context context, ProductList currentList) {
        this.mContext = context;
        this.currentList = currentList;
        this.list = currentList.getProducts();

    }

    @Override
    public int getSwipeLayoutResourceId(int i) {
        return R.id.swipe;
    }

    @Override
    public View generateView(final int position, ViewGroup viewGroup) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.item_products_list, null);


        return v;
    }

    @Override
    public void fillValues(final int position, View convertView) {
        Product temp = list.get(position);
        final TextView name = (TextView) convertView.findViewById(R.id.name);
        final TextView count = (TextView) convertView.findViewById(R.id.count);
        final ImageView categoryView = (ImageView) convertView.findViewById(R.id.imageView_category);
        final GifMovieView gifMovieView = (GifMovieView) convertView.findViewById(R.id.gif_1);
        final SwipeLayout swipeLayout = (SwipeLayout) convertView.findViewById(getSwipeLayoutResourceId(position));
        swipeLayout.getDragEdgeMap().clear();
        swipeLayout.addDrag(SwipeLayout.DragEdge.Left, swipeLayout.findViewById(R.id.bottom_wrapper));
        swipeLayout.addSwipeListener(new SwipeLayout.SwipeListener() {
            @Override
            public void onStartOpen(SwipeLayout swipeLayout) {
                lineIsClose = false;
            }

            @Override
            public void onOpen(SwipeLayout swipeLayout) {

                lineIsClose = false;
            }

            @Override
            public void onStartClose(SwipeLayout swipeLayout) {
                lineIsClose = false;
            }

            @Override
            public void onClose(SwipeLayout swipeLayout) {
                lineIsClose  = true ;
            }

            @Override
            public void onUpdate(SwipeLayout swipeLayout, int i, int i1) {
            }

            @Override
            public void onHandRelease(SwipeLayout swipeLayout, float v, float v1) {
            }
        });

        if (temp.isCompleted()) {
            name.setTextColor(mContext.getResources().getColor(R.color.gray));
            name.setPaintFlags(name.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
            count.setPaintFlags(count.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
        } else {
            name.setTextColor(mContext.getResources().getColor(R.color.black));
            name.setPaintFlags(name.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
            count.setPaintFlags(count.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
        }
        name.setText(temp.getName());
        count.setText("" + temp.getCount());


        if (position % 2 == 0)// oylesine var
            categoryView.setBackgroundColor(Color.BLUE);
        if (position % 3 == 0)
            categoryView.setBackgroundColor(Color.RED);

        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if ( lineIsClose ){
                    gifMovieView.setVisibility(View.VISIBLE);
                final Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        gifMovieView.setVisibility(View.GONE);
                        if (!list.get(position).isCompleted()) {//false ise true yap

                            list.get(position).setCompleted(true);
                            name.setTextColor(mContext.getResources().getColor(R.color.gray));
                            name.setPaintFlags(name.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                            count.setPaintFlags(count.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

                        } else { // true ise false yap

                            list.get(position).setCompleted(false);
                            name.setTextColor(mContext.getResources().getColor(R.color.black));
                            name.setPaintFlags(name.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
                            count.setPaintFlags(count.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));

                        }

                        currentList.setProducts(list);
                        SharedPrefManager.saveList(currentList);
                    }
                }, 600);

                //saveList(gifMovieView);
            }
        }
    });
        convertView.findViewById(R.id.bottom_wrapper).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                swipeLayout.close();
                //
                // removeFromList(position);
                list.remove(position);
                notifyDataSetChanged();
            }
        });

    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }
}

      

+3


source to share


3 answers


I have the same problem and I solved it with this code:

viewHolder.swipeLayout.addSwipeListener(new SimpleSwipeListener() {
        @Override
        public void onOpen(SwipeLayout layout) {

            super.onOpen(layout);
           ((Fragment)mFragment).setListViewClickable(false);
        }

        @Override
        public void onClose(SwipeLayout layout) {

            super.onClose(layout);
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    ((Fragment) mFragment).setListViewClickable(true);
                }
            } , 100);

        }

        @Override
        public void onStartOpen(SwipeLayout layout) {
            ((Fragment)mFragment).setListViewClickable(false);
            super.onStartOpen(layout);
          }

        @Override
        public void onStartClose(SwipeLayout layout) {

            ((Fragment)mFragment).setListViewClickable(false);
            super.onStartClose(layout);
        }
    });

      



usually when I open the expand layout I turn off the click on the list and when I close the sheet layout I turn on the list after some time equal to 100ms.

0


source


I have the same problem as you. And I found the answer here: http://android-pratap.blogspot.com/2015/07/swipe-recyclerview-using.html

You can set onClick to SurfaceView (). And now you can scroll through the item without calling onClickItem.



viewHolder.swipeLayout.getSurfaceView().setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(mContext, " onClick : " + item.getName() + " \n" + item.getEmailId(), Toast.LENGTH_SHORT).show();
        }
    });

      

+6


source


You must use

swipeLayout.getSurfaceView().setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    // delete view or something you want to do
    }
});

      

+2


source







All Articles