0
我正在创建一个Android应用程序,该应用程序实现拖放操作以在不同位置放置视图。代码运行完美,但有一个小故障。有时当我拖动一个视图时,它会突然隐藏起来,或者从相应的活动中看不见。为了让它回到活动中,我必须重新加载活动,方法是返回到上一个并再次返回。拖放从布局中删除视图
的阻力监听器的代码如下:
public class MyDragListener implements View.OnDragListener
{
@Override
public boolean onDrag(View v, DragEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
return false;
case DragEvent.ACTION_DRAG_ENTERED:
return false;
case DragEvent.ACTION_DROP:
view=(View)event.getLocalState();
int h = view.getHeight();
int w = view.getWidth();
h=h/2;
w=w/2;
if((event.getX()-w)<0||(event.getY()-h)<0){
}else if((event.getX()+w)>width||(event.getY()+h)> height){
}
else{
view.setX(event.getX()-w);
view.setY(event.getY()-h);
owner = (ViewGroup) view.getParent();
owner.removeView(view);
RelativeLayout container=(RelativeLayout)v;
container.addView(view);
relativeLayout.removeAllViews();
relativeLayout.addView(text_name);
relativeLayout.addView(text_dob);
relativeLayout.addView(edit_name);
relativeLayout.addView(edit_dob);
relativeLayout.invalidate();
view.invalidate();
text_name.invalidate();
text_dob.invalidate();
edit_name.invalidate();
edit_dob.invalidate();
}
return true;
case DragEvent.ACTION_DRAG_ENDED:
return false;
case DragEvent.ACTION_DRAG_EXITED:
return false;
default:
return false;
}
}
}
触摸监听器的代码如下:
public class MyTouchListenerForEditText implements OnTouchListener
{
@Override
public boolean onTouch(View view, MotionEvent event) {
// TODO Auto-generated method stub
int action = event.getAction() & MotionEvent.ACTION_MASK;
if(action==MotionEvent.ACTION_UP)
{
time_up=System.currentTimeMillis();
if(time_up-time_down<2000)
{
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
((EditText)view).setInputType(InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
view.requestFocus();
((EditText)view).setSelection(((EditText)view).getText().length());
}
}
}
else if(action==MotionEvent.ACTION_MOVE)
{
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(
view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
}
else if(action==MotionEvent.ACTION_DOWN)
{
edit_name.setInputType(InputType.TYPE_NULL|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
edit_dob.setInputType(InputType.TYPE_NULL|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
edit_hobbies.setInputType(InputType.TYPE_NULL|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
edit_ideal_person.setInputType(InputType.TYPE_NULL|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
edit_strengths.setInputType(InputType.TYPE_NULL|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
edit_weakness.setInputType(InputType.TYPE_NULL|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
time_down=System.currentTimeMillis();
return true;
}
return false;
}
}
也请让我知道我们是否可以实现拖动和上落动态添加视图到任何活动?
谢谢,它解决了我的这个问题。我在同一个代码中面临更多问题。每当我将edittext拖到另一个edittext上时,被拖动的edittext就会不可见。你能告诉我为什么发生这种情况吗? –
你能分享修改过的代码吗?让我们试着弄清楚现在发生了什么。 – Abdul
我已经用前面告诉过的修改更新了代码。 –