Android ExpandableListView - 将子按钮的按钮监听器放在哪里

时间:2012-07-05 21:12:48

标签: java android expandablelistview onclicklistener expandablelistadapter

我一直在使用ExpandableListView玩很多东西,我无法弄清楚在哪个位置为视图中的子项添加按钮监听器。我设法让一个按钮监听器工作,使用下面的getChildView(),但它似乎是所有按钮的相同监听器。

最好的情况是我能够在实例化ExpandableListAdapter类的类中实现按钮侦听器,而不必将侦听器放在实际的ExpandableListAdapter类中。在这一点上,我甚至不知道这是否可能

我一直在试验这个教程/代码:HERE

getChildView()

@Override
public View getChildView(int set_new, int child_position, boolean view, View view1, ViewGroup view_group1)
{
    ChildHolder childHolder;
    if (view1 == null)
    {

        view1 = LayoutInflater.from(info_context).inflate(R.layout.list_group_item_lv, null);

        childHolder = new ChildHolder();

        childHolder.section_btn = (Button)view1.findViewById(R.id.item_title);
        view1.setTag(childHolder);
        childHolder.section_btn.setOnClickListener(new OnClickListener()
        {

            @Override
            public void onClick(View v)
            {
                Toast.makeText(info_context, "button pushed", Toast.LENGTH_SHORT).show();

            }
        });



    }else {
        childHolder = (ChildHolder) view1.getTag();
    }
        childHolder.section_btn.setText(children_collection.get(set_new).GroupItemCollection.get(child_position).section);
        Typeface tf = Typeface.createFromAsset(info_context.getAssets(), "fonts/AGENCYR.TTF");

        childHolder.section_btn.setTypeface(tf);
        return view1;
}

非常感谢任何帮助。谢谢你,我会站在那里。

1 个答案:

答案 0 :(得分:2)

如果按钮位于ExpandableListView中,则其侦听器需要位于适配器中。

我不确定你问题的主旨,但如果你问如何将按钮与子行的内容联系起来,我可以回答这个问题。 :P

为了演示目的,我将假设一个简单的子行布局。

<强> child_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal" >
<TextView
    android:id="@+id/ListItem1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="left|center_vertical"
    android:paddingLeft="7dip"
    android:paddingRight="7dip"
    android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
    android:id="@+id/ListItem2"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="right|center_vertical"
    android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
    android:id="@+id/button"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>

然后,要在按下按钮时获取行的内容,可以使用该按钮回溯到父vieew,然后获取必要的子视图及其内容:

    childHolder.section_btn.setOnClickListener(new OnClickListener()    
    {    
        @Override    
        public void onClick(View v)    
        {    
            LinearLayout ll = (LinearLayout) v.getParent();    // get the view containing the button
            TextView tv1 = (TextView) ll.findViewById(R.id.ListItem1);  // get the reference to the first widget
            TextView tv2 = (TextView) ll.findViewById(R.id.ListItem2);  // get the reference to the second widget
            String text1 = tv1.getText.toString();  // Get the contents of the first widget to a string
            String text2 = tv2.getText.toString();  // Get the contents of the second widget to a string
        }    
    });  

如果这不是你想要的,请澄清你的问题,我会再拍一次。