0

ExpandableListViewでいろいろと遊んでいますが、ビューの子となるボタンのボタンリスナーをどこに追加すればよいかわかりません。以下のgetChildView()を使用するボタンリスナーを機能させることができましたが、すべてのボタンで同じリスナーのようです。

最良のシナリオは、ExpandableListAdapterクラスをインスタンス化するクラスにボタンリスナーを実装でき、リスナーを実際のExpandableListAdapterクラスに配置する必要がないことです。現時点では、それが可能かどうかさえわかりません

私はこのチュートリアル/コードを実験してきました:ここに

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;
}

どんな助けでも大歓迎です。ありがとう、私は待機します。

4

1 に答える 1

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>

次に、ボタンが押されたときに行の内容を取得するには、ボタンを使用して親ビューに戻り、必要な子ビューとその内容を取得します。

    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
        }    
    });  

これがあなたが探していたものではない場合、あなたの質問を明確にしてください、そして私はそれで別のショットを撮ります。

于 2012-07-06T04:34:05.300 に答える