2016-04-17 28 views
1

私はRecyclerView GridLayoutを以下の画像のように持っています しかし、アイテムを削除する方法がわかりません。 LongClickアイテムが表示されたときに表示される新しいImageViewを作成したい場合、この要素をImageViewの上に移動すると、この要素は削除されます。どうか、どうしたらいいですか? recyclerviewチェックthisライブラリに削除するためにスワイプするためRecyclerViewからアイテムを削除するGridLayout

enter image description here

+0

このチュートリアルに従うことができます。 https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf#.fpfcua692 –

+0

@ZahidulIslamはい、このチュートリアルでは削除されていません。GridLayout –

答えて

3

最初のダウンロードGitHub projectのように、@ zahidulislam。 ファイルを編集します。方法public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive)

y = (int) viewHolder.itemView.getY(); 

public static int y; 

および発現:

MainActivity:

public class MainActivity extends AppCompatActivity { 

private RecyclerListAdapter adapter; 
private ImageView trashImage; 
private RecyclerView recyclerView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); 

    trashImage = (ImageView) findViewById(R.id.trash_can); 
    adapter = new RecyclerListAdapter(this); 

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    recyclerView.setAdapter(adapter); 

    GridLayoutManager layoutManager = new GridLayoutManager(this, 2); 
    recyclerView.setLayoutManager(layoutManager); 

    recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, recyclerView, new RecyclerItemClickListener.OnItemClickListener() { 
     @Override 
     public void onItemClick(View view, int position) { 
     } 

     @Override 
     public void onItemLongClick(final View view, final int position) { 
      final ImageView trashCan = (ImageView) trashImage.findViewById(R.id.trash_can); 
      trashCan.setVisibility(View.VISIBLE); 

      recyclerView.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        int y = SimpleItemTouchHelperCallback.y; 
        switch (event.getAction()) { 
         case MotionEvent.ACTION_MOVE: 
          if (y < -50) { 
           trashCan.setImageDrawable(getResources().getDrawable(R.drawable.trashcan_hover)); 
          } else { 
           trashCan.setImageDrawable(getResources().getDrawable(R.drawable.trashcan)); 
          } 
          break; 
         case MotionEvent.ACTION_UP: 
          if (y < -50) { 
           RecyclerListAdapter.mItems.remove(position); 
           adapter.notifyDataSetChanged(); 
           trashCan.setImageDrawable(getResources().getDrawable(R.drawable.trashcan)); 
           trashCan.setVisibility(View.GONE); 
           return true; 
          } 
          trashCan.setVisibility(View.GONE); 
         case MotionEvent.ACTION_CANCEL: 
          break; 
        } 
        return false; 
       } 
      }); 
     } 
    })); 

    ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(adapter); 
    ItemTouchHelper mItemTouchHelper = new ItemTouchHelper(callback); 
    mItemTouchHelper.attachToRecyclerView(recyclerView); 
    } 
} 

でSimpleItemTouchHelperCallback追加フィールドトップ(ゴミ箱)に落としてください。

+0

しかし、これはドラッグ&ドロップの再位置決めロジックを破壊しますが、それをどのように扱いますか? – Ishaan

+0

@ishaanは決してありません:) –

1

。 それは非常に素晴らしいapiを持っています。

+0

ありがとうございます。私はImageViewを表示する必要があります。たぶん私はgetXを使ってやる、getY?座標アイテム== ImageViewそのアイテムが削除された場合。 –

+0

このライブラリは、グリッドレイアウトとは関係ありません。私は似たような解決策を探しています、あなたは何かを見つけることができましたか? – Ishaan

+0

@Ishaanそれはまた、gridlayoutのヘルパークラスを持っています。チェックサンプル – androidnoobdev

関連する問題