0

ユーザーがグループ内の多くのオプションから 1 つのオプションを選択するシナリオを実装しようとしています。下の図を参照してください。

ここに画像の説明を入力

上の図では、 Sauceという名前のグループの下に、3 つのオプションがあります。ユーザーは、これらのうち 1 つのオプションのみをチェックする必要があります。例: ユーザーが以前に「ホット」を選択した場合。その後、彼は「マイルド」をタップし、チェックは「ホット」から消え、「マイルド」に表示される必要があります。この点を理解していただければ幸いです。

このアプローチを実現するには、チェックマークを切り替えることができるようにa group's childviewsまたはのいずれかを参照する必要があります。この時点でどうすればいいのか本当にわかりません...助けてください。ありがとう..individual checks

childlayout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dip" >

    <TextView
        android:id="@+id/childname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:layout_alignParentLeft="true" 
        android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
        android:textAppearance="?android:attr/textAppearanceMedium" />

  <ImageView
android:id="@+id/checkmark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/childname"
android:layout_alignParentRight="true"
android:layout_marginRight="22dp"
android:background="@android:color/transparent"
android:src="@drawable/checkmark" />
</RelativeLayout>

子 OnClick リスナー

list.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

                    @Override
                    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {

                     //how to get reference to other children here to toggle checkmark of current as well as previously tapped child's checkmark?  

                        return false;
                    }
                });
4

1 に答える 1

2

で作成されたすべての子の参照を格納するためにハッシュマップを使用しましたgetChildView。私のカスタム アダプターでは、次のように宣言しました。

private HashMap<String, View> childviewReferences = new HashMap<String, View>();

public View getChildView(int groupPosition, int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {

    final String childStr = (String) getChild(groupPosition, childPosition);

       LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);//context.getLayoutInflater();

    convertView = inflator.inflate(R.layout.childlayout, null);

     TextView textview = (TextView) convertView.findViewById(R.id.childname);
                textview.setText(childStr);
    childviewReferences.put(Integer.toString(groupPosition) + Integer.toString(childPosition), convertView);

        return convertView;
    }

子 OnClick リスナー

list.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

              @Override
              public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {

CreatePizzaAdapter adapter = (CreatePizzaAdapter) parent.getExpandableListAdapter();

        View conv = adapter.getChildviewReferences().get(Integer.toString(groupPosition) + Integer.toString(childPosition));

                    //now you can find any view and child and do anything
                        return true;
                    }
                });
于 2013-10-05T10:57:25.490 に答える