2016-02-18 2 views
0

Я пытаюсь поймать точку, когда Recyclerview вещь опущена после a перетащить & операция удаления, например. для считывания координат.LinearLayoutManager prepareForDrop не уволен

мысль, что prepareForDrop событие LinearLayoutManager будет правильно для этого:

public class OverviewActivity extends AppCompatActivity implements OnStartDragListener { 

private RecyclerView recyclerView; 
private RecyclerAdapter myAdapter; 
private LinearLayoutManager linearLayoutManager; 
private ItemTouchHelper mItemTouchHelper; 

private dbhelper db; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_overview); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    linearLayoutManager = new LinearLayoutManager(this) { 
     @Override 
     public void prepareForDrop(View view, View target, int x, int y) { 
      // do something 
      return; 
     } 
    }; 
    recyclerView.setLayoutManager(linearLayoutManager); 

    myAdapter = new RecyclerAdapter(this, this); 
    recyclerView.setAdapter(myAdapter); 
    myAdapter.setOnScrollToListener(new OnScrollToListener() { 
     @Override 
     public void scrollTo(int position) { 
      recyclerView.scrollToPosition(position); 
     } 
    }); 

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

    db = new dbhelper(this); 
    db.open(); 

    myAdapter.addRootCards(3); 
} 
....... 

LinearLayoutManager создается и прикрепляется к RecyclerView и Override для prepareForDrop событие реализуется.

Проблема в следующем: prepareForDrop() никогда не называется, но почему, что не так?

ответ

0

В соответствии с исходным кодом prepareForDrop() вызывается только из onMoved, если экземпляр LayoutManager экземпляра ViewDropHandler. В вашем случае это так. Это заставляет меня полагать, что onMoved() не называется. Согласно его javadocs onMoved() вызывается только если onMove() возвращает true. Вы не указали реализацию вашего SimpleItemTouchHelperCallback, но я предполагаю, что его реализация onMove() возвращает false.