切换按钮仅在单击ListView中的列表项后进入焦点

时间:2012-12-05 05:51:16

标签: android android-listview listviewitem togglebutton

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

MY CODE SNIPPET:

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 CODE:

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

2 个答案:

答案 0 :(得分:0)

要调用切换按钮侦听器,您需要从onItemClick侦听器中删除切换按钮代码并将其放在侦听器之外。

答案 1 :(得分:0)

  

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

这是因为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 discuss creating fast adapters以获取大量信息,我不能在这里填写答案。)