我有一个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"
答案 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以获取大量信息,我不能在这里填写答案。)