0

テスト中のコードは、これまでのところ次のとおりです。

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

最初のアイテムを長押しすると、トースト通知が表示されるため、正しく実行されるようになりました。ただし、表示されるはずの DragShadow は表示されません。私の推測では、これは TableLayout の一部であるため、これが原因である可能性があります。何か案は?

4

2 に答える 2

0

通常、TableView はそれを埋めるために TableRows を必要とします。TextView を TableRow に配置し、この TableRow を TableView に配置すると、OnDragListeners などに正しいコードを使用していれば、TextView を好きな場所にドラッグ アンド ドロップできます。落とし込める場所がないのでレイアウトにセット…

于 2013-02-17T19:49:27.803 に答える
0

これは厄介ですが、TextView. 正確な理由はよくわかりませんが、他の s にバインドされているstartDrag()非ルート レベルViews に限定されていると完全に推測してい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 には多くの質問がなく、回答もさらに少ないため、害はありません。

于 2012-07-26T03:00:52.433 に答える