Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android ExpandableListView Parent with Button

I am trying to achieve something like this. The Expandable List consists of the names of certain categories and when a parent is clicked, it shows the list of all the children in that category. Now, suppose I want dynamically add a child to any category ? How do I do that ? Do I keep a button with every parent in the list clicking on which would add a new child under it ?

But looking around in different forums, I came to realize that it is not really easy to set a button click handler inside every parent. But if that is the only way, can anyone give me some sample code please ?

I found this thread but wasn't able to implement it in my code. Android Row becomes Unclickable with Button

like image 271
Swayam Avatar asked Jun 13 '12 12:06

Swayam


1 Answers

Adding a button to the group view shouldn't be that difficult.

I believe the below should work (although I don't have a project using an array backed ExpandableListView to test on).

I don't know your group row layout, so I'll make one up here for reference purposes.

group_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/test"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
    <TextView
        android:id="@android:id/text1"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:gravity="center_vertical"
        android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    <Button
        android:id="@+id/addbutton"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:text="Add"
        android:textSize="12dp" />
</LinearLayout>

Then in your getGroupView method from your adapter:

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
    if (convertView == null) {
        View convertView = View.inflate(getApplicationContext(), R.layout.group_layout, null);
        Button addButton = (Button)convertView.findViewById(R.id.addButton);

        addButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                // your code to add to the child list
            }
        });
    }        
    TextView textView = (TextView)convertView.findViewById(R.id.text1);
    textView.setText(getGroup(groupPosition).toString()); 
    return convertView; 
} 
like image 70
Barak Avatar answered Oct 13 '22 10:10

Barak