2012-07-26 59 views
0

我的代码迄今其次,因为我测试一下:当你在一个TableLayout的子项中时,你可以拖放一个TextView吗?

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的一部分,它可能会导致这种情况。有任何想法吗?

回答

0

好吧,这很尴尬,但我想我只是想出了为什么它不让我拖拽TextView。我并不真正知道为什么,但我完全猜测startDrag()仅限于绑定到其他View s的非根级别View s。所以,我的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的问题并不多,甚至更少,所以它不会受到伤害。

0

TableView通常需要TableRows来填充它。如果您将TextView放在TableRow中,并将TableRow放置在TableView中,则可以将TextView拖放到任意位置,前提是您使用了正确的OnDragListeners等代码,当然,您不能拖放不是在布局中设置,因为没有地方你可以放下它...

相关问题