我在点击自定义列表视图项时遇到问题。
在我的活动中,我有一个按钮和一个自定义ListView,以便在单击按钮时,每个项目左侧都会显示复选框,再次单击按钮时,复选框将消失。默认情况下,单击该项目时,它应显示Toast1 ,并且在单击按钮时(启用复选框时),它应显示Toast2。因此按钮的作用类似于切换按钮。
所以我在Activity中编写了ListView.onitemclickListener
来在getView中显示Toast1和convertView.setOnClickListener
来显示Toast2。
在getView()中,我写了:
if(myFlag)
{
convertView.setOnClickListener ...
{
display Toast2
}
}
此处myFlag将根据切换按钮设置为true / false。
但是当点击切换按钮并单击列表视图项后,有时它会显示Toast1,有时会显示Toast2。
答案 0 :(得分:0)
在运行时添加不同的OnClickListener可能会导致一些问题,特别是如果将它绑定到getView()方法。
如果您使用单个onClickListener并在那里检查您的标记,它应该按照您想要的方式工作。
伪代码:
convertView.setOnClickListener ...
{
if(myFlag){
hide checkbox;
display Toast2;
myFlag =false;
}
else {
show checkbox;
display Toast 1;
myFlag =true;
}
}
答案 1 :(得分:0)
最后我自己解决了这个问题。 只需在getView()方法中将convertView的setclickable()设置为true / false即可。如果设置为true,则Toast2将显示(),如果设置为False,则将显示Toast1。
答案 2 :(得分:0)
我使用setTag()/ getTag()方法获取项目的位置。在列表适配器的getView()方法中,使用 setTag(“position”)方法将项目的位置设置为行项目的标记(在您的案例按钮中)。
单击任何行中的按钮时,将为该按钮调用onClick()方法,在onClick()方法中,可以使用 getTag()方法获取位置。对所有行按钮使用与onClick例程相同的方法。
示例代码:列表项可能是这样的
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button1"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="117dp"
android:background="@drawable/grad"
android:onClick="onButtonClick" />
getView()方法可能是这样的:
public View getView (int position, View convertView, ViewGroup parent) {
...
...
button.setTag(position);
...
}
onClick例程可能是这样的:
public void onButtonClick(View v) {
String tag = v.getTag().toString();
if(tag != null) {
int position = Integer.parseInt(tag);
}
...
...
}