android - How can I drag and drop with multiple activities? -


i used service call create floating window floats on other views/activities. window has own activity , different dialog.

now want add drag&drop action window, example if long click imageview in floating window, can drag , drop activity(or base activity). i've been tried use onlongclicklistener trigger drag event, , added ondraglistener catch drop event. here's have far :

public class myfloatableactivity extends floatactivity { private imageview mimg;  private mydrageventlistener mdraglisten;  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);      requestwindowfeature(window.feature_no_title);     setcontentview(r.layout.float_activity));      // imageview drag&drop test     mimg = (imageview)findviewbyid(r.id.drag_img));     mimg.setonlongclicklistener(new imageview.onlongclicklistener() {          @override         public boolean onlongclick(view v) {             clipdata dragdata = clipdata.newplaintext("dragtext", "dragtext");              v.startdrag(dragdata, new view.dragshadowbuilder(v), null, 0);             return false;         }      });      mimg.setondraglistener(mdraglisten);      switchtofloat(); // make activity float } 

mydrageventlistener class :

public class mydrageventlistener implements view.ondraglistener {  private clipdata mdragdata;  @override public boolean ondrag(view v, dragevent event) {     final int action = event.getaction();     imageview img;      if(v instanceof imageview) {         img = (imageview)v;     } else{         return false;     }      switch(action) {         case dragevent.action_drag_started:             if(event.getclipdescription().hasmimetype(clipdescription.mimetype_text_plain)) {                 log.d("ddd", "drag started!!!");                 return true;             }else {                 return false;             }         case dragevent.action_drag_entered:             log.d("ddd", "entered!!!");         case dragevent.action_drag_location:         case dragevent.action_drag_exited:             return true;         case dragevent.action_drag_ended:         case dragevent.action_drop:             log.d("ddd", "action drop!!!");             return true;     }     return true; } 

the reason implemented ondraglistener listen action_drop event in base activity when imageview dropped. allows me determine whether imageview dropped on destination image, or layout. here's base activity :

public class draganddropdemo extends activity {  private imageview mimg;  private mydrageventlistener mdraglisten;  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.drag_and_drop);      //findviewbyid(r.id.drag_layout).setondraglistener(mdraglisten);      mimg = (imageview)findviewbyid(r.id.dest_img);      mimg.setondraglistener(mdraglisten); } 

the problem ondraglistener in draganddropdemo not being invoked, couldn't catch drop event in base activity. i've seen many examples of drag , drop, never got right solution. i'm wondering if throwing drag&drop event different activity in android possible. if android it, be?

is there can help?

i found solution myself. integrated ondraglistener myfloatableactivity, , send intent draganddropdemo activity receive intents whenever drop event occurs.

so here's code.

public class myfloatableactivity extends floatactivity { ...  @override protected void oncreate(bundle savedinstancestate) { ...      mimg.setondraglistener(new view.ondraglistener() {          @override         public boolean ondrag(view v, dragevent event) {             switch (event.getaction()) {                 case dragevent.action_drag_started:                     if (event.getclipdescription().hasmimetype(                             clipdescription.mimetype_text_plain)) {                         return true;                     } else {                         return false;                     }                 case dragevent.action_drag_entered:                 case dragevent.action_drag_location:                 case dragevent.action_drag_exited:                     return true;                 case dragevent.action_drag_ended:                 case dragevent.action_drop:                     intent intent = new intent();                     intent.setaction("com.test.draganddrop");                     intent.putextra("drop", 0);                     sendbroadcast(intent);                     return true;              }             return false;         }      }); ... } 

and in draganddropdemo,

public class draganddropdemo extends activity { ... @override protected void onresume() {     super.onresume();     intentfilter filter = new intentfilter();     filter.addaction("com.test.draganddrop");     registerreceiver(mbr, filter); }  @override protected void onpause() {     super.onpause();     unregisterreceiver(mbr); }  broadcastreceiver mbr = new broadcastreceiver() {      @override     public void onreceive(context context, intent intent) {         int flag = intent.getintextra("drop", 0);         switch (flag) {             case 0:                 mtext.settext("dropped!");                 mimg.setimageresource(r.drawable.icon_argentina);                 break;         }     }  }; } 

Comments

Popular posts from this blog

c# - DetailsView in ASP.Net - How to add another column on the side/add a control in each row? -

javascript - firefox memory leak -

Trying to import CSV file to a SQL Server database using asp.net and c# - can't find what I'm missing -