Cüneyt Cüneyt - 2 months ago 15
Android Question

Android: swipe list item cause clickOnItem

I want to swipe the item of my listview to right and left.
For this purpose I use this project.

https://github.com/daimajia/AndroidSwipeLayout
I can swipe the items but when I after swipe the item, item's onclick called. I don't want this.
I made an effort on SwipeListener but I colud not overcome this situation totally. I can swipe left to right without calling onClickItem but when I swipe 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;
}
}

Answer

I have a same problem and i resolved this by 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);
        }
    });

generally when swipe layout open i disable the listview click and when swipe layout close enable the listview click after some time like 100 ms.

Comments