Skip to content
This repository has been archived by the owner on Jan 29, 2021. It is now read-only.

Drag And Drop in ViewPager #4

Closed
Raheel-Adnan opened this issue Oct 24, 2013 · 6 comments
Closed

Drag And Drop in ViewPager #4

Raheel-Adnan opened this issue Oct 24, 2013 · 6 comments

Comments

@Raheel-Adnan
Copy link

Hi,
I love DynamicGridView, It works like charm. But there is one issue, It doesn't work if we implement it in ViewPager. Is there a way I could use this code in ViewPager? Waiting for your fruitful response.
Thank you

@askerov
Copy link
Owner

askerov commented Oct 25, 2013

Hi!

Yes, you can use it with ViewPager. Only one limitation – DynamicGridView must not be in edit mode when you need to slide pages via ViewPager.

You can use startEditMode() and stopEditMode() to change DynamicGridView state. For example: start edit mode on item long click and finish immediately after item dropped

 gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            gridView.startEditMode();
            return false;
        }
    });

    gridView.setOnDropListener(new DynamicGridView.OnDropListener() {
        @Override
        public void onActionDrop() {
            gridView.stopEditMode();
        }
    });

Or you can use action bar menu to start or stop edit mode.

@Raheel-Adnan
Copy link
Author

Thank you for the response, I've tried the same but Drag n Drop isn't working.

v.setOnLongClickListener(new OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {
        // TODO Auto-generated method stub
        Log.e(StringConstant.TAG, "Long clicked");
        myPager.setPagingEnabled(false);

        gridView.startEditMode();
        return false;
    }
});

The items in Gridview start shaking but I'm unable to drag those items. Pager gets all the motion events so, I tried to disable paging while in startEditMode() but still I'm unable to drag the items.
Here is my custom ViewPager

public class CustomViewPager extends ViewPager {

private boolean isPagingEnabled;
public CustomViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.isPagingEnabled = true;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (this.isPagingEnabled) {
        return super.onTouchEvent(event);
    }else{

    return false;
    }
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    if (this.isPagingEnabled) {
        return super.onInterceptTouchEvent(event);
    }else{

    return false;
    }
}

public void setPagingEnabled(boolean b) {
    this.isPagingEnabled = b;
}

class YScrollDetector extends SimpleOnGestureListener {
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        if(Math.abs(distanceY) > Math.abs(distanceX)) {
            return true;
        }
        return false;
    }
}

}

@askerov
Copy link
Owner

askerov commented Oct 29, 2013

Hi.
I try to use dynamic grid with ViewPager and fragments. It's work for me without any modifications of ViewPager. Here is some code

public class PagerActivity extends FragmentActivity {
    private GridFragment mGridFragment = new GridFragment();
    private Fragment mFragment = new Fragment();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pager);
        ViewPager pager = (ViewPager) findViewById(R.id.pager);
        pager.setAdapter(new MyPagerAdapter());
    }

    private class MyPagerAdapter extends FragmentStatePagerAdapter {
        public MyPagerAdapter() {
            super(getSupportFragmentManager());
        }

        @Override
        public Fragment getItem(int i) {
            switch (i) {
                case 0:
                    return mGridFragment;
                case 1:
                    return mFragment;
            }
            return null;
        }

        @Override
        public int getCount() {
            return 2;
        }
    }

    @Override
    public void onBackPressed() {
        if (mGridFragment.isEditMode()) {
            mGridFragment.stopEditMode();
        } else {
            super.onBackPressed();
        }
    }
}


public class GridFragment extends Fragment {

    private DynamicGridView gridView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.activity_grid, container, false);
        gridView = (DynamicGridView) root.findViewById(R.id.dynamic_grid);
        gridView.setAdapter(new CheeseDynamicAdapter(getActivity(),
                new ArrayList<String>(Arrays.asList(Cheeses.sCheeseStrings)),
                2));
        //add callback to stop edit mode if needed
        gridView.setOnDropListener(new DynamicGridView.OnDropListener() {
            @Override
            public void onActionDrop() {
                gridView.stopEditMode();
            }
        });
        gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                gridView.startEditMode();
                return false;
            }
        });

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getActivity(), parent.getAdapter().getItem(position).toString(),
                        Toast.LENGTH_SHORT).show();
            }
        });
        return root;
    }

    public boolean isEditMode() {
        return gridView.isEditMode();
    }

    public void stopEditMode() {
        gridView.stopEditMode();
    }
}

@Raheel-Adnan
Copy link
Author

Hi Askerov,

Thanks man, now it's working. Thank you for your help and support, you are the best :)

@askerov askerov closed this as completed Oct 30, 2013
@mani051990
Copy link

HI,
How can i drag and drop items between pages using dynamicGridView. please help me in this.

@yuxingfafu
Copy link

@mani051990 could you finish the effect? drag between pages? thank you

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants