1

I need to Inflate this layout 15 times on a main layout activity (arranged in 3 rows by 5 columns), and set OnTouchListener for each Button padButton istances, wath is the best way to do it?? I try to inflate layout but not have idea to set listener separated ...

the layout to inflate drumpad.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/padLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/pad"
    android:orientation="vertical"
    android:padding="3dp" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical|clip_horizontal|top"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/padButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/titles2" />

        <Button
            android:id="@+id/padSelect"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="15dp"
            android:layout_height="wrap_content" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="21dp" >

        <Button
            android:id="@+id/padName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="2dp"
            android:background="#0f0f0f"
            android:padding="2dp"
            android:text="@string/pad"
            android:textColor="#dfdfdf"
            android:textSize="10sp" />

    </LinearLayout>

</LinearLayout>

the main Layout (container) activity_drum.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/DrumLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#999"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".Drum" >

</LinearLayout>
kosma822
  • 183
  • 1
  • 2
  • 7
  • Is the OnTouchListener always the seam for each button? Or you want to explicit a different action for each button? – Seraphim's Mar 19 '13 at 19:26
  • However I'm not sure you can have multiple buttons with the same id... – Seraphim's Mar 19 '13 at 19:34
  • if i set the tag for each button can I do? example: button.setTag etc etc ... I need an example to get the layout in the right way. I can use a for loop? – kosma822 Mar 19 '13 at 19:49
  • Yes, I suppose you can. Look at my anwser, if you can set a tag you can recognize the button when during the children iteration. In a way or another you've to "do something" to recognize every single button... – Seraphim's Mar 19 '13 at 19:53
  • are we talking about pads for a drum machine or something? – Seraphim's Mar 19 '13 at 19:59

1 Answers1

1

I'm not sure you can have more than one button with the same id. However, you can get your root View, cast it to a ViewGroup. Use getChildCount() and getChildAt(), and recurse as needed. Like this:

//we start from the root view
ViewGroup rootViewGroup = findViewById(R.id.rootLinearLayout);

for (int i = 0; i < this.getChildCount(); i++) {
    View childView = this.getChildAt(i);

    //is it a button?
    if (childView instanceof Button) {
        Button button = (Button) childView;
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //insert here the code
            }
        });
    }

    if (childView instanceof ViewGroup) {
        //iterate throught childView children
    }
}

Ok, you can't take this code and put it to work without a little bit of pain. It's just a starting point. But...

I think you'll need to rethink your approach and try to develop your own custom view, I would use a compound view, look here:

http://developer.android.com/guide/topics/ui/custom-components.html#compound

You'll need a little practice but I think this would be great for your purpose.

EDIT

Maybe you can find some usefull information here:

Add an array of buttons to a GridView in an Android application

and here:

http://developer.android.com/guide/tutorials/views/hello-gridview.html

and here (a drum machine):

http://mindtherobot.com/blog/420/android-beatz-making-a-drum-machine-app/

Community
  • 1
  • 1
Seraphim's
  • 12,559
  • 20
  • 88
  • 129