Android 如何处理自定义listview项目单击?
我对自定义listview项单击有问题 在我的“活动”中,我有一个按钮和一个自定义列表视图,单击按钮时,复选框会显示在每个项目的左侧,再次单击按钮时,复选框会消失。默认情况下,单击项目时,它会显示为AST1,单击按钮时(启用复选框时),它应该显示Toast2。因此该按钮的作用类似于切换按钮 因此,我在Activity中编写了Android 如何处理自定义listview项目单击?,android,listview,Android,Listview,我对自定义listview项单击有问题 在我的“活动”中,我有一个按钮和一个自定义列表视图,单击按钮时,复选框会显示在每个项目的左侧,再次单击按钮时,复选框会消失。默认情况下,单击项目时,它会显示为AST1,单击按钮时(启用复选框时),它应该显示Toast2。因此该按钮的作用类似于切换按钮 因此,我在Activity中编写了ListView.onitemclickListener,以显示Toast1,并在getView中编写了convertView.setOnClickListener,以显示T
ListView.onitemclickListener
,以显示Toast1,并在getView中编写了convertView.setOnClickListener
,以显示Toast2
在getView()中,我写了:
if(myFlag)
{
convertView.setOnClickListener ...
{
display Toast2
}
}
此处,myFlag将根据切换按钮设置为真/假
但是,在单击“切换”按钮并单击listview项之后,有时它会显示为Toast1,有时会显示为Toast2。在运行时添加不同的onClickListener可能会导致一些问题,特别是如果您将其与getView()方法绑定 如果您使用一个onClickListener并在那里检查您的标志,那么它应该按照您想要的方式工作 伪代码:
convertView.setOnClickListener ...
{
if(myFlag){
hide checkbox;
display Toast2;
myFlag =false;
}
else {
show checkbox;
display Toast 1;
myFlag =true;
}
}
最后我自己解决了这个问题。 只需在getView()方法中将convertView的setclickable()设置为true/false。如果设置为true,将显示Toast2(),如果设置为False,将显示Toast1。我使用setTag()/getTag()方法获取项目的位置。在列表适配器的getView()方法中,使用setTag(“位置”)方法将项目的位置设置为行项目的标记(在您的案例中为按钮)。
单击任意行中的按钮时,将为该按钮调用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" />
onClick例程可以是这样的:public View getView (int position, View convertView, ViewGroup parent) {
...
...
button.setTag(position);
...
}
public void onButtonClick(View v) {
String tag = v.getTag().toString();
if(tag != null) {
int position = Integer.parseInt(tag);
}
...
...
}
事实上,我应该放首歌,而不是烤面包。因此,它应该写在我的项目中的活动中。在clicklistner中启动歌曲到底有什么问题?您可以使用view.getContext()从侦听器内部访问您的活动。我在listview.itemclick-variables中有很多复杂的代码,广播等。我只是想知道我如何处理这两个地方的点击。实际上我的问题与你的答案略有不同。我没有每行按钮,这里与位置无关。顺便说一句,我可以直接在listview.itemclick上获得该职位。无论如何,我学会了一个新的主题setTag和getTag。感谢您的帮助。列表视图项单击和视图单击是否同时为您工作???是的,它们正在工作。如果convertview的setclickable()设置为false-listview项单击正常。如果设置为true,则getView()中的“查看”按钮可以工作。我同时询问了……这两个按钮不能同时工作(直到并除非您将一个按钮的单击传递给另一个按钮)。其中一个必须被禁用,因为您正在使用convertview的setClickable()。我现在明白您的意思了。无论如何,我一次只想让一个人工作。