据我所知,有两种方法可以处理对不同列表项的点击:
setTag() 为 Adapter 中的列表项设置类型,然后使用 setOnItemClickListener() 为列表和 getTag()区分类型的 View ,如下所示:listview.setOnItemClickListener(new OnItemClcikListener(){});
setOnClickListener() 在 getView() 期间分别为每个项目设置,如下所示:item.setOnClickListener(new OnClickListener() {});
有什么区别,首选哪个?
最佳答案
与 OnClickListener 相比,
OnItemClickListener 非常易于管理。
如果您仍然愿意管理 OnClickListener,我会告诉您为什么 OnItemClickListener 比 OnClickListener 好得多。
一旦您开始滚动
我也会选择 如果您需要为每个项目创建可点击的特定部分,或者希望对给定项目执行多个操作,最好将这些操作收集到一个创建一次的 OnClickListener 中附加到 getView() 中的每个项目。您可以通过附加有关点击操作的元数据来区分点击了哪个项目,并可能使用 setTag() 将位置列到 View 本身。ListView 项目将开始被重用,您最终会创建大量的 OnClickListener。别担心,这不是内存泄漏,因为 GC 会出现并收集它们,但您也不应该感到安全,因为 GC 会暂停您的 Activity ,即使它是相当大的几分之一秒。OnItemClickListener 除非您为单个列表项计划了不同的东西。
关于Android setOnItemClickListener 与 setOnClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28295197/
我在尝试在我的应用程序中创建动态复选框时遇到问题。设计工作正常,我可以根据需要创建任意数量的复选框。复选框与TextView一起放入TableRow中,以便文本位于复选框的左侧。但我的问题是,在我的Activity中,我可以获得复选框的“状态”,无论它是否被选中。我使用充气机来创建我的复选框。复选框的xml:我调用的函数来创建一个包含TextView和复选框的新表格行:publicvoidlayoutMakeSpeakerEffect(StringeffectName,inteffectNumber){LayoutInflaterlinflater=(LayoutInflater)ge
我正处于android开发的早期阶段,我遇到了for的问题循环。这是我的代码:for(inti=0;i我有TableRows和两个textViews在每个TableRows.当我点击第一个textView1[i],第二个,textView2[i]将不可见或可见。但是在setOnClickListener我的代码块“从内部类中访问变量‘i’需要声明为最终”错误代码。我已经声明了i作为final,比如for(finalinti=0;i.然后我有一个不同的错误。“变量‘i’不能声明为最终的” 最佳答案 声明一个新变量j并将您的代码修改为:
我有一个listview,上面有edittext。edittext正在从ListView中搜索数据。ListView由字符串数组填充。edittext搜索功能工作正常,但onclick不工作。它应该去另一个传递一些Intent的Activity。我怎样才能做到这一点?我正在使用这种方法。它是否正确?如何传递Intent?editText.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){}});谢谢 最佳答案 如果您在布局xml文件中将
据我所知,有两种方法可以处理对不同列表项的点击:使用setTag()为Adapter中的列表项设置类型,然后使用setOnItemClickListener()为列表和getTag()区分类型的View,如下所示:listview.setOnItemClickListener(newOnItemClcikListener(){});在适配器内部,setOnClickListener()在getView()期间分别为每个项目设置,如下所示:item.setOnClickListener(newOnClickListener(){});有什么区别,首选哪个? 最
是否可以在单击按钮时将参数传递给监听器:protectedvoidonCreate(BundlesavedInstanceState){....StringmyArg="Hello";Buttonbutton1=(Button)findViewById(R.id.myButton);button1.setOnClickListener(myListener);StringmyArg="Goodye";Buttonbutton2=(Button)findViewById(R.id.myOtherButton);button2.setOnClickListener(myListener);
我正在创建一个自定义数组适配器,我现在想实现一个处理点击View的函数。我有两个选择,但我想知道性能/工作速度或其他方面是否存在差异?选项1,在arrayAdapter本身中:row.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstub}});选项2,来自主Activity:listView.setAdapter(adapter);listView.setOnItemClickListener(newOnItemClickListe
为了注册一个OnClickListener,我总是在Button上调用setOnClickListener(listener)。现在我看到了一段代码,其中通过使用android:onclick="nameOfMethod"并使用View参数实现该方法,在布局中定义了点击事件。这两种添加OnClickListener的方式有区别吗?推荐哪一个? 最佳答案 在XML中绑定(bind)函数的onClick是onClick和它调用的函数之间的绑定(bind)。为了使onClick起作用,该函数将只有一个参数。OnClickListener是
这毫无意义,我收到一条错误消息,指出无法将setOnClickListener应用于MainActivity。但我做过其他项目,但我从未遇到过这个问题。怎么回事?publicclassMainActivityextendsActionBarActivity{Buttonbutton;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=((Button)findVie
我有包含TextView的AndroidLisView来显示列表中的数据,我添加将其更改为Webview,之后一切看起来都很好,除了setOnClickListener不再响应......我已经阅读了有关Webview的信息,发现不支持setOnClickListener,而是支持setOnTouchListener在AndroidWebView中使用与setOnClickListener相同功能的方法?像这样:myWebView.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){//do
我是java和android开发的新手,我有一个问题,让我解释一下。我有自定义接口(interface)和自定义类,它们将其用作监听器。在我的HomeActivity中,我在我的自定义类上调用方法,该类通过监听器(接口(interface))响应,这是简短版本:publicclassHomeActivityextendsActivityimplementsWebClientResponseListener{privateUseruser;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//....//Icallmycla