1

I have a list of items that work fine for an onClick event, but I can not get the onDrag event to occur.

My class is as follows:

public class ActListadoCategorias extends AppCompatActivity {
...

private void init() {
 m_lvwCategorias = (ListView) findViewById(R.id.lvwCategorias);
        
m_lvwCategorias.setAdapter(m_itemCategoria);
        m_lvwCategorias.setOnItemClickListener(onItemCategoriaListViewOnClickListener);
        m_lvwCategorias.setOnDragListener(onItemCategoriaListViewOnDragListener);
...   

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

        init();
        getCategorias();
    }
...

 private AdapterView.OnItemClickListener onItemCategoriaListViewOnClickListener = new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            try {
                Categoria categoria = (Categoria)m_lvwCategorias.getItemAtPosition(position);
                Intent actCategoriaIntent = new Intent(m_actListadoCategorias, ActCategoria.class);
                actCategoriaIntent.putExtra("Activity", TipoDato.TipoActividad.ACTUALIZACION);
                actCategoriaIntent.putExtra("Object", categoria);
                startActivityForResult(actCategoriaIntent, 0);
            }
            catch(Exception ex){
                Mensaje.mostrar("Error", m_actListadoCategorias);

            }
        }
    };

    private AdapterView.OnDragListener onItemCategoriaListViewOnDragListener  = new AdapterView.OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {

            final int action = event.getAction();

            switch (action) {
                case MotionEvent.ACTION_MOVE: {
                   
                    }
                    return true;
                }
            }
            return false;
        }

    };

}        
        

I put a breakpoint inside of onItemCategoriaListViewOnDragListener, but dragging any item from the list does not produce the related event.

Any ideas or suggestions are welcome.

Thanks

Fabián Romo
  • 319
  • 2
  • 14

2 Answers2

0

I think you're using the wrong OnDragListener try using: View.OnDragListener for an example try this link: "Drag and drop, ListView and item Views that miss the ACTION_DRAG_STARTED event"

toonvanstrijp
  • 417
  • 1
  • 5
  • 18
0

LongClick was missing to activate Drag

m_lvwCategorias.setOnItemLongClickListener(onItemCategoriaListViewOnItemLongClickListener);
m_lvwCategorias.setOnDragListener(onItemCategoriaListViewOnDragListener);
private AdapterView.OnItemLongClickListener onItemCategoriaListViewOnItemLongClickListener = new  AdapterView.OnItemLongClickListener(){
  public  boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
         View.DragShadowBuilder shadowBuilder = new 
         View.DragShadowBuilder(view);
         m_lvwCategorias.startDrag(null,shadowBuilder,m_lvwCategorias.getItemAtPosition(position),0);
         return true;
     }
};

        private AdapterView.OnDragListener onItemCategoriaListViewOnDragListener  = new AdapterView.OnDragListener() {
            @Override
            public boolean onDrag(View v, DragEvent event) {

                final int action = event.getAction();

                switch (action) {
                    case MotionEvent.ACTION_MOVE: 
                         ....
                    break;
                  }
               }
}
    
Fabián Romo
  • 319
  • 2
  • 14