onDrag不适用于ListView

时间:2017-06-19 17:22:20

标签: android

我有一个适用于onClick事件的项目列表,但我无法获得onDrag事件。

我的课程如下:



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;
        }

    };

}        
        
&#13;
&#13;
&#13;

我在onItemCategoriaListViewOnDragListener中放置了一个断点,但是从列表中拖动任何项都不会产生相关的事件。

欢迎任何想法或建议。

由于

2 个答案:

答案 0 :(得分:0)

我认为您使用错误的OnDragListener尝试使用:View.OnDragListener作为示例尝试此链接:&#34; Drag and drop, ListView and item Views that miss the ACTION_DRAG_STARTED event&#34;

答案 1 :(得分:0)

缺少LongClick以激活拖动

&#13;
&#13;
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;
                  }
               }
}
    
&#13;
&#13;
&#13;