0

我有一个带有两个 Textview 和切换按钮的 Listview,并且我有 ToggleChangeListener 用于切换按钮。但是,如果我单击切换按钮而不单击列表项,则它不会进入焦点(即未调用侦听器),而是在单击 Listview 中的列表项后进入焦点

我的代码片段:

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

我的 LISVIEW XML 代码:

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

我的切换按钮 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

但是,如果我单击切换按钮而不单击列表项,则它不会进入焦点(即未调用侦听器),而是在单击 Listview 中的列表项后进入焦点

这是因为您的onItemClick()方法中的代码在至少单击一次之前不会运行。

您需要创建一个自定义适配器并在getView()方法中定义 ToggleButton 的行为,以使您的按钮以您期望的方式运行。


像这样的东西:

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 回答