gpt4 book ai didi

android - 如何从 ListView 中拖动项目并将其放在外部 TextView 上?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:32:34 25 4
gpt4 key购买 nike

我正在尝试实现 android 的拖放示例。长按一个项目后,我将其拖到目标级别并放在那里。我在某种程度上是成功的。但我想要一些不同的东西。我做过这样的事情.. enter image description here

但我想将所有项目添加到 listView 中,我将在长按 listview 后拾取一个项目,然后将项目拖到我的目标级别并将其放在那里。我想要这样的东西.. enter image description here

我的代码如下...

public class MainActivity extends Activity {



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






findViewById(R.id.mango).setOnLongClickListener(longListen);
findViewById(R.id.orange).setOnLongClickListener(longListen);
findViewById(R.id.apple).setOnLongClickListener(longListen);
findViewById(R.id.banana).setOnLongClickListener(longListen);

findViewById(R.id.drop_here).setOnDragListener(DropListener);

listview.setOnItemLongClickListener(new OnItemLongClickListener() {

public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int pos, long id) {
// TODO Auto-generated method stub

Log.i("long clicked","pos"+" "+pos);

return true;
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

OnLongClickListener longListen = new OnLongClickListener() {

@Override
public boolean onLongClick(View v) {

DragShadow dragShadow = new DragShadow(v);

ClipData data = ClipData.newPlainText("", "");

v.startDrag(data, dragShadow, v, 0);

return false;
}
};

private class DragShadow extends View.DragShadowBuilder {

ColorDrawable greyBox;

public DragShadow(View view) {
super(view);
// TODO Auto-generated constructor stub
greyBox = new ColorDrawable(Color.LTGRAY);
}

@Override
public void onDrawShadow(Canvas canvas) {
// TODO Auto-generated method stub
// super.onDrawShadow(canvas);

greyBox.draw(canvas);
}

@Override
public void onProvideShadowMetrics(Point shadowSize,
Point shadowTouchPoint) {
// TODO Auto-generated method stub
// super.onProvideShadowMetrics(shadowSize, shadowTouchPoint);
View v = getView();

int height = (int) v.getHeight() / 2;
int width = (int) v.getWidth() / 2;

greyBox.setBounds(0, 0, width, height);
shadowSize.set(width, height);

shadowTouchPoint.set(width / 2, height / 2);

}


}

OnDragListener DropListener = new View.OnDragListener() {

@Override
public boolean onDrag(View v, DragEvent event) {
// TODO Auto-generated method stub

int dragEvent = event.getAction();

switch (dragEvent) {
case DragEvent.ACTION_DRAG_ENTERED:
Log.i("Drag ", "Entered");
break;
case DragEvent.ACTION_DRAG_EXITED:
Log.i("Drag ", "Exit");
break;
case DragEvent.ACTION_DROP:
Log.i("Drag ", "Drop");

TextView target = (TextView) v;
TextView dragg = (TextView) event.getLocalState();
target.setText(dragg.getText());
break;
default:
break;
}

return true;
}
};

}

我尝试了一些教程,但我无法从那里获得解决方案。 Android List View Drag and Drop sort

最佳答案

我找到了解决方案。很简单,只需要调用 setOnItemClickListener 里面的 startDrag 方法即可。

listview.setOnItemLongClickListener(new OnItemLongClickListener() {

public boolean onItemLongClick(AdapterView<?> arg0, View v,
int pos, long id) {
// TODO Auto-generated method stub


v.startDrag(data, dragShadow, v, 0);
return true;
}
});

关于android - 如何从 ListView 中拖动项目并将其放在外部 TextView 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17441807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com