|
6 | 6 | import android.support.v7.widget.LinearLayoutManager; |
7 | 7 | import android.support.v7.widget.RecyclerView; |
8 | 8 | import android.support.v7.widget.StaggeredGridLayoutManager; |
| 9 | +import android.support.v7.widget.helper.ItemTouchHelper; |
9 | 10 | import android.view.Menu; |
10 | 11 | import android.view.MenuInflater; |
11 | 12 | import android.view.MenuItem; |
| 13 | +import android.view.MotionEvent; |
12 | 14 |
|
13 | 15 | import com.clock.systemui.R; |
14 | 16 | import com.clock.systemui.adapter.AuthorRecyclerAdapter; |
@@ -69,6 +71,21 @@ public boolean onOptionsItemSelected(MenuItem item) { |
69 | 71 | } else if (itemId == R.id.delete_item) { |
70 | 72 | mRecyclerAdapter.notifyItemChanged(3); |
71 | 73 |
|
| 74 | + } else if (itemId == R.id.update_item) { |
| 75 | + RecyclerView.LayoutManager layoutManager = mRecyclerView.getLayoutManager(); |
| 76 | + if (layoutManager instanceof LinearLayoutManager) { |
| 77 | + LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager; |
| 78 | + int position = linearLayoutManager.findFirstCompletelyVisibleItemPosition();//获取第一个完全可见的Item的位置 |
| 79 | + if (RecyclerView.NO_POSITION != position) { |
| 80 | + AuthorInfo authorInfo = mAuthorInfoList.get(position); |
| 81 | + authorInfo.setNickName("Android"); |
| 82 | + authorInfo.setMotto("I am Android Man!"); |
| 83 | + authorInfo.setPortrait(R.mipmap.ic_launcher); |
| 84 | + mRecyclerAdapter.notifyItemChanged(position); |
| 85 | + } |
| 86 | + |
| 87 | + } |
| 88 | + |
72 | 89 | } |
73 | 90 | return super.onOptionsItemSelected(item); |
74 | 91 | } |
@@ -101,5 +118,68 @@ private void initView() { |
101 | 118 | mRecyclerView.setLayoutManager(linearLayoutManager); |
102 | 119 | mRecyclerAdapter.setSmallType(false); |
103 | 120 | mRecyclerView.setAdapter(mRecyclerAdapter); |
| 121 | + //ItemTouchHelper 用于实现 RecyclerView Item 拖曳效果的类 |
| 122 | + ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { |
| 123 | + |
| 124 | + @Override |
| 125 | + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { |
| 126 | + //actionState : action状态类型,有三类 ACTION_STATE_DRAG (拖曳),ACTION_STATE_SWIPE(滑动),ACTION_STATE_IDLE(静止) |
| 127 | + int dragFlags = makeFlag(ItemTouchHelper.ACTION_STATE_DRAG, ItemTouchHelper.UP | ItemTouchHelper.DOWN |
| 128 | + | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);//支持上下左右的拖曳 |
| 129 | + int swipeFlags = makeMovementFlags(ItemTouchHelper.ACTION_STATE_SWIPE, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);//表示支持左右的滑动 |
| 130 | + return makeMovementFlags(dragFlags, swipeFlags);//直接返回0表示不支持拖曳和滑动 |
| 131 | + } |
| 132 | + |
| 133 | + /** |
| 134 | + * @param recyclerView attach的RecyclerView |
| 135 | + * @param viewHolder 拖动的Item |
| 136 | + * @param target 放置Item的目标位置 |
| 137 | + * @return |
| 138 | + */ |
| 139 | + @Override |
| 140 | + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { |
| 141 | + int fromPosition = viewHolder.getAdapterPosition();//要拖曳的位置 |
| 142 | + int toPosition = target.getAdapterPosition();//要放置的目标位置 |
| 143 | + mRecyclerAdapter.moveItem(fromPosition, toPosition); |
| 144 | + return true; |
| 145 | + } |
| 146 | + |
| 147 | + /** |
| 148 | + * @param viewHolder 滑动移除的Item |
| 149 | + * @param direction |
| 150 | + */ |
| 151 | + @Override |
| 152 | + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { |
| 153 | + int position = viewHolder.getAdapterPosition();//获取要滑动删除的Item位置 |
| 154 | + mRecyclerAdapter.removeItem(position); |
| 155 | + } |
| 156 | + |
| 157 | + @Override |
| 158 | + public boolean isLongPressDragEnabled() { |
| 159 | + return super.isLongPressDragEnabled();//不支持长按拖曳效果直接返回false |
| 160 | + } |
| 161 | + |
| 162 | + @Override |
| 163 | + public boolean isItemViewSwipeEnabled() { |
| 164 | + return super.isItemViewSwipeEnabled();//不支持滑动效果直接返回false |
| 165 | + } |
| 166 | + }); |
| 167 | + itemTouchHelper.attachToRecyclerView(mRecyclerView); |
| 168 | + mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { |
| 169 | + @Override |
| 170 | + public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { |
| 171 | + return false; |
| 172 | + } |
| 173 | + |
| 174 | + @Override |
| 175 | + public void onTouchEvent(RecyclerView rv, MotionEvent e) { |
| 176 | + |
| 177 | + } |
| 178 | + |
| 179 | + @Override |
| 180 | + public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { |
| 181 | + |
| 182 | + } |
| 183 | + }); |
104 | 184 | } |
105 | 185 | } |
0 commit comments