当TextView在TableLayout的子级中时,您可以拖放它吗?

时间:2012-07-26 02:41:16

标签: android drag-and-drop android-tablelayout

到目前为止,我的代码如下所示,因为我正在测试它:

public class TestActivity extends Activity {
TableLayout table;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);

    table = (TableLayout)findViewById(R.id.table);
    setStuff();
    setStuff2();
    setStuff3();  
}

public void setStuff() {
    LayoutInflater inflater = LayoutInflater.from(this);
    TextView view = (TextView)inflater.inflate(R.layout.some_text, table, false);
    view.setText("First");
    view.setTag(String.valueOf(table.getChildCount()));
    view.setOnLongClickListener(new View.OnLongClickListener() {            
        @Override
        public boolean onLongClick(View v) {
            v.startDrag(ClipData.newPlainText("index", v.getTag().toString()), new View.DragShadowBuilder(v), null, 0);
            Toast.makeText(v.getContext(), "index you are clicking on is "+v.getTag().toString(), Toast.LENGTH_SHORT).show();
            return false;
        }
    });
    table.addView(view);
}
public void setStuff2() {
    LayoutInflater inflater = LayoutInflater.from(this);
    TextView view = (TextView)inflater.inflate(R.layout.some_text, table, false);
    view.setText("Second");
    view.setTag(String.valueOf(table.getChildCount()));
    table.addView(view);
}
public void setStuff3() {
    LayoutInflater inflater = LayoutInflater.from(this);
    TextView view = (TextView)inflater.inflate(R.layout.some_text, table, false);
    view.setText("Three");
    view.setTag(String.valueOf(table.getChildCount()));
    table.addView(view);
}


protected class MyDragListener implements View.OnDragListener {

    @Override
    public boolean onDrag(View v, DragEvent event) {

        //Stuff to check the event action cases

        return false;
    }

}//end of MyDragListener

现在,当我长按第一项时,它会正确运行,因为我收到Toast通知。我没有看到DragShadow,我想要看到它。我的猜测是因为它是TableLayout的一部分,它可能会导致这种情况。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这很尴尬,但我想我只是弄清楚为什么它不让我拖放TextView。我并不确切知道原因,但我完全猜测startDrag()仅限于绑定到其他View的非根级View。所以,我的xml是这样的:

<强>最初

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/da_text"></TextView>

修改

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/da_text"/>

</LinearLayout>

希望这有助于其他人。关于Drag-n-Drop的问题并不多,所以也不会有什么问题。

答案 1 :(得分:0)

TableView通常需要TableRows来填充它。如果你将TextView放在TableRow和TableView中的TableRow中,你可以将TextView拖放到你想要的任何地方,前提是你使用了OnDragListeners等的正确代码,当然你不能拖放一个不是的文本视图。在布局中设置,因为没有可以放下它的地方......