0

2つのテキストビューとトグルボタンを備えたリストビューがあり、トグルボタン用のontoggleChangeListenerがあります。しかし、リストアイテムをクリックせずにトグルボタンをクリックすると、フォーカスが入りません(つまり、リスナーは呼び出されません)が、リストビューでリストアイテムをクリックするとフォーカスが入ります。

マイコードスニペット:

alarmList.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View v, final int pos,
            long arg3) {

        System.out.println("Item On click is Called");

        toggle = (ToggleButton) v.findViewById(R.id.tg);
        toggle.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                System.out
                        .println("On click of the Toggle Button is called !!");
                if (toggle.isChecked()) {
                    System.out.println("Checked");
                } else {
                    System.out.println("Not Checked ");
                }
            }
        });
    }
});

MY LISVIEW XMLコード:

    android:id="@+id/alarmlist"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="#fff"
    android:dividerHeight="2dp" >

MY TOGGLE BUTTON XMLコード:

    android:id="@+id/tg"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:text="ToggleButton" 
4

2 に答える 2

0

トグル ボタン リスナーを呼び出すには、トグル ボタンのコードを onItemClick リスナーから削除し、リスナーの外に配置する必要があります。

于 2012-12-05T05:53:50.503 に答える
0

しかし、リストアイテムをクリックせずにトグルボタンをクリックすると、フォーカスされません(つまり、リスナーは Called ではありません)が、リストビューでリストアイテムをクリックするとフォーカスされます

これは、onItemClick()メソッド内のコードが少なくとも 1 回クリックされるまで実行されないためです。

カスタム アダプターを作成し、メソッドで ToggleButton の動作を定義getView()して、ボタンが期待どおりに機能するようにする必要があります。


このようなもの:

public class MyAdapter extends ArrayAdapter<String> {
    public MyAdapter(Context context, int textViewResourceId, List<String> objects) {
        super(context, textViewResourceId, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);

        ToggleButton toggle = (ToggleButton) view.findViewById(R.id.tg);
        toggle.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                System.out
                        .println("On click of the Toggle Button is called !!");
                if (toggle.isChecked()) {
                    System.out.println("Checked");
                } else {
                    System.out.println("Not Checked ");
                }
            }
        });

        return view;
    }
}

(...しかし、この特定の例は最も効率的な方法ではありません。AndroidのRomain Guyが、ここで答えを詰め込むことができない豊富な情報のための高速アダプターの作成について話し合っているのを見てください。)

于 2012-12-05T05:54:55.667 に答える