Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Drag and Drop in TableRow

Das Thema "Drag and Drop in TableRow" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 07.10.2011, 12:03   #1 (permalink)
Neuer Benutzer

Registriert seit: 04.08.2011
Beiträge: 16
Abgegebene Danke: 2
Erhielt 0 Danke für 0 Beiträge
Standard Drag and Drop in TableRow

Hi,

ich benötige für meine App eine Anordnung von Buttons per Drag and Drop. Ich möchte die Buttons in den TableRows eines TableLayouts droppen. Dafür habe ich mir einen DragListener geschrieben der darauf horcht wenn ein Drag von einem Button gestartet wird. Der Button den man verschieben kann liegt als Muster immer auf der GUI und erzeugt beim loslassen in einer TableRow eine neue Buttoninstanz. Jetzt das eigentliche Problem: Ich kann in eine TableRow nur etwas droppen wenn in ihr schon ein Control, wie z.B. ein TextView liegt. Sonst schaffe ich es nicht das ACTION_DRAG_ENTERED oder EXITED auszulösen. Wie kann ich es einrichten das jede leere TableRow mit einer Größe von zum Beispiel 50 x 300 Pixeln dargestellt wird. Ich habe schon probiert in der XML Datei dem TableLayout eine feste größe zu geben und die Row auf Layout width/height match_parent zu setzen oder einfach beiden eine feste Größe zu geben. Aber anscheinend ist eine Row nur ansteuerbar wenn sie ein Control als Kindelement hat.
Hier ist mein Code main.xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/button_DragPattern" android:text="DragMe"></Button>
    <TableLayout android:layout_height="50dp" android:layout_width="300dp" android:id="@+id/tableLayout_DropContainer">
        <TableRow android:layout_width="match_parent" android:id="@+id/tableRow_DropRow" android:layout_height="match_parent">
        </TableRow>
    </TableLayout>
</LinearLayout>
Code Activity (wenn ich hier die TextViews einkommentiere klappt es so wie ich möchte, aber das wär ein doofer Workaround das muss doch auch anders gehen)
Code:
package TableDnD.Activities;

import android.app.Activity;
import android.content.ClipData;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.DragEvent;
import android.view.View;
import android.view.View.DragShadowBuilder;
import android.view.View.OnDragListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class TableDnDActivity extends Activity 
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        TableRow tr = (TableRow)findViewById(R.id.tableRow_DropRow);
        /*TextView tv = new TextView(this);
        tv.setText("HUHU");
        tr.addView(tv);*/
        tr.setOnDragListener(new BoxDragListener());
        
        Button b = (Button)findViewById(R.id.button_DragPattern);
        b.setOnLongClickListener(new OnLongClickListener() 
        {
            public boolean onLongClick(View v) 
            {
                ClipData data = ClipData.newPlainText("foo","bar");
                DragShadowBuilder shadowBuilder = new DragShadowBuilder(v);
                v.startDrag(data, shadowBuilder, v, 0);
                return false;
            }
        });
        
        /*TableLayout tl = (TableLayout)findViewById(R.id.tableLayout_DropContainer);
        tl.setOnDragListener(new BoxDragListener());*/
    }
    
    public Context getGlobalContext()
    {
        return this;
    }
    
    class BoxDragListener implements OnDragListener
    {
        boolean m_bInsideOfMe = false;
        
        public boolean onDrag(View self, DragEvent event) 
        {
            if (event.getAction() == DragEvent.ACTION_DRAG_STARTED)
            {
                
            } 
            else if (event.getAction() == DragEvent.ACTION_DRAG_ENTERED)
            {
                self.setBackgroundColor(Color.BLUE);
                //((TableRow)self).setBackgroundColor(Color.BLUE);
                m_bInsideOfMe = true;
            } 
            else if (event.getAction() == DragEvent.ACTION_DRAG_EXITED)
            {
                self.setBackgroundColor(Color.BLACK);
                //((TableRow)self).setBackgroundColor(Color.BLACK);
                m_bInsideOfMe = false;
            } 
            else if (event.getAction() == DragEvent.ACTION_DROP)
            {
                if (m_bInsideOfMe)
                {
                    // hier befinde ich mich in einer TableRow und lasse den Button los nun sollte er linksbündig in der
                    // Row eingefügt werden und gleichzeitig wenn die Row in die der Button gedroppt wurde die zuletzt zum
                    // TableLayout hinzugefügte ist eine neue Row hinzufügen in die auch gedroppt werden könnte
                    // Pseudocode (so stelle ich mir das in etwa vor):
                    
                    TableRow container = (TableRow) self;
                    container.addView(new Button(getGlobalContext()));
                    TableLayout parent = (TableLayout)container.getParent();
                    int i = 0;
                    while(!parent.getChildAt(i).equals(container))
                    {
                        i++;
                    }
                    if(i == parent.getChildCount()-1)
                    {
                        TableRow tr = new TableRow(getGlobalContext());
                        tr.setOnDragListener(new BoxDragListener());
                        /*TextView tv = new TextView(getGlobalContext());
                        tv.setText("HUHU");
                        tr.addView(tv);*/
                        parent.addView(tr);
                    }
                    ((TableRow)self).setBackgroundColor(Color.BLACK);
                }
            } 
            else if (event.getAction() == DragEvent.ACTION_DRAG_ENDED)
            {
                    
            }
            return true;
        }
    }
}
vielen Dank
Liebe Grüße
Terth
Terth ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
Drag & Drop möglich? Hoppilein Kommunikation 1 15.01.2012 11:52
Drag&Drop im Bowser floke303 Sonstige Apps & Widgets 5 09.09.2011 11:16
Drag and Drop Sese76 Acer Iconia A500 / A501 Forum 1 03.07.2011 13:06
drag and drop browser? mcvogts HTC Wildfire Forum 7 29.09.2010 19:52
Drag & Drop möglich Hoppilein HTC Desire Forum 8 15.08.2010 22:19




Du liest gerade: "Drag and Drop in TableRow" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.