8

Android用のアプリケーションを開発しています。

ExpandableListView のグループにボタンを配置するにはどうすればよいですか?

ボタンをクリックすると、グループを開いたり閉じたりする代わりに、ダイアログが表示されます。ボタンの外側をクリックすると、グループは正常に開閉します。

下の画像は、ボタンを挿入したい場所を示しています。

http://img193.imageshack.us/img193/2060/expandablelistviewbutto.png

4

4 に答える 4

26

Android ExpandableListView は、グループまたは子に任意のボタンを持つことができます。

ボタンがアダプターで以下のようにフォーカス可能でないことを確認してください。

editButton.setFocusable(false);

これは、group.parent 内の Group と Button を別々にクリックするのに役立ちます

于 2013-10-30T07:08:39.063 に答える
2

次のようなボタンを含むカスタム XML ファイルで groupView をインフレートする必要があります (例inflate_xml_groupview.xml):

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/FrameLayoutGroupView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">


    <Button
        android:id="@+id/myButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ButtonOfMyExpandableListGroupView"
        android:visibility="visible" />

</FrameLayout>

次に、BaseExpandableListAdapter を拡張するカスタム ExpandableListAdapter を作成し、次のように getGroupView() メソッドで Button を取得する必要があります。

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {

        convertView = inflater.inflate(R.layout.inflate_xml_groupview, null);
        holder = new ViewHolder();
        holder.Button = (Button) convertView.findViewById(R.id.myButton);
        convertView.setTag(holder);
        } else {
        holder = (ViewHolder) convertView.getTag();
        }
        holder.position = ListOfItems.get(groupPosition).getPosition();
        Button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                Toast.makeText(getApplicationContext(), "Button " + groupPosition + " is clicked !", Toast.LENGTH_SHORT).show();
               // DO STUFF
        }
    });
}

お役に立てれば。

于 2012-05-30T16:21:37.010 に答える
0

独自のExpandableListViewを作成しました。コンポーネントを構築するために、XMLとクラスのレイアウトを使用しました。

そして驚くべきことに、それは非常に簡単でした。

リストの各要素(リスト自体、グループ、およびアイテム)に対してクラスとレイアウトを作成したため、標準のExpandableListViewよりもはるかに理解しやすかったです。マップのリストのリストをいじる必要はありませんでした。私の意見では、コードの表現度と読みやすさが低下します。

さらに、リストは非常に柔軟でカスタマイズ可能になります。実行時にグループとアイテムを簡単に追加および削除できます。これで、リストの外観と内部コンポーネントを自由に変更できます。

私が作成したExpandableListViewは、標準などと同じように実行できます。パフォーマンスが低下したかどうかはわかりませんが、目に見える問題はありませんでした。

于 2012-05-30T16:10:06.470 に答える