package mcxtzhang.recyclerviewdemo.itemtouchhelper; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.helper.ItemTouchHelper; import android.widget.Toast; import com.mcxtzhang.commonadapter.rv.CommonAdapter; import com.mcxtzhang.commonadapter.rv.ViewHolder; import java.util.Collections; import java.util.List; import mcxtzhang.recyclerviewdemo.R; import mcxtzhang.recyclerviewdemo.nestrv.TestBean; import static mcxtzhang.recyclerviewdemo.nestrv.TestBean.fakerDatas; public class TestItemHelperActivity extends AppCompatActivity { RecyclerView mRv; List<TestBean> mDatas; CommonAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRv = (RecyclerView) findViewById(R.id.rv); mRv.setLayoutManager(new LinearLayoutManager(this)); mRv.setAdapter(mAdapter = new CommonAdapter<TestBean>(this, mDatas = fakerDatas(), R.layout.item_test_drag) { @Override public void convert(ViewHolder holder, TestBean testBean) { holder.setText(R.id.tv, testBean.getName()); } }); //0则不执行拖动或者滑动 ItemTouchHelper.Callback mCallback = new ItemTouchHelper.SimpleCallback(/*ItemTouchHelper.UP */0, ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { int fromPosition = viewHolder.getAdapterPosition();//得到拖动ViewHolder的position int toPosition = target.getAdapterPosition();//得到目标ViewHolder的position if (fromPosition < toPosition) { //分别把中间所有的item的位置重新交换 for (int i = fromPosition; i < toPosition; i++) { Collections.swap(mDatas, i, i + 1); } } else { for (int i = fromPosition; i > toPosition; i--) { Collections.swap(mDatas, i, i - 1); } } mAdapter.notifyItemMoved(fromPosition, toPosition); return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { Toast.makeText(TestItemHelperActivity.this, "滑动了:" + direction, Toast.LENGTH_SHORT).show(); } }; ItemTouchHelper itemTouchHelper = new ItemTouchHelper(mCallback); itemTouchHelper.attachToRecyclerView(mRv); } }