2012-07-26 92 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等代碼,當然,您不能拖放不是在佈局中設置,因爲沒有地方你可以放下它...

相關問題