首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在ListActivity中使用自定义适配器按钮单击

在ListActivity中使用自定义适配器按钮单击
EN

Stack Overflow用户
提问于 2011-11-16 11:55:51
回答 3查看 1.6K关注 0票数 1

在使用自定义ListActivity时,我遇到了一个奇怪的问题。列表项通过自定义的getView绑定到数据,并且包含很少的文本视图和按钮。单击项目的按钮时,我将根据按下的按钮标签打开一个新的活动,其中包含数据项id。

问题是,有时对某个项目的一个按钮的单击实际上执行了对其他项目的单击,或者看起来是这样的。这真的很奇怪,它的作用就像我点击的按钮失去了对另一个焦点,而不是点击。当使用标准按钮时,我实际上可以看到列表按钮上的焦点出现了某种混乱,从一个按钮跳到另一个按钮。

我还没有想出这个场景,但我怀疑它与后台对getView的多个调用有某种关系。

这是我的适配器的getView实现:

代码语言:javascript
运行
AI代码解释
复制
public View getView(int position, View convertView, ViewGroup parent) 
{
    View v = convertView;
    Context context = App.getContext();
    if (v == null)
    {
        // if the view is empty, init
        v = mInflater.inflate(R.layout.list_item, null);

        // add click listener to the item button
        Button b = (Button)v.findViewById(R.id.b);
        OnClickListener lsn = new OnClickListener() 
        {
            @Override
            public void onClick(View view) 
            {
                // when clicked we want to open the new activity with the selected id
                int id = Integer.parseInt(view.getTag().toString());
                Intent i = new Intent(mActivityContext, otherActivity.class);
                i.putExtra("ID", id);

                mActivityContext.startActivity(i);
            }
        };

        b.setOnClickListener(lsn);
    }

    ItemData currItem = m_Items.get(position);

    // Some fields data bindings to currItem

    Button btn = (Button)v.findViewById(R.id.b);
    btn.setEnabled(currItem.isButtonEnabled);
    btn.setTag(currItem.getID());

    return v;
}

这是我在布局上的列表定义:

代码语言:javascript
运行
AI代码解释
复制
<ListView android:layout_width="fill_parent" android:id="@+id/android:list" 
          android:fadingEdge="none" android:divider="@color/transparent" android:dividerHeight="2dp" 
          android:background="@color/transparent" android:focusable="false" 
          android:cacheColorHint="@color/transparent" android:layout_height="fill_parent"></ListView>

有什么想法吗?谢谢!

重要更新:

经过更多的测试后,我注意到在哪些条目被错误单击时存在一些一致性。一直都是镜像项目。也就是说,当单击列表中的第一项时,当我得到其他项目时,它总是最后一项!

例如,如果列表中有3项,则第一项和最后一项有时相互引用,但从不提及中间项,中间项目总是按预期工作。好像在某个地方有另一个列表与项目的顺序相反,有时我得到镜像索引而不是常规的和可见的.

真奇怪!很可能我做错了什么,但我想不出这种情况会发生。

我已经将数组适配器转换为一个类,用一个baseAdapter扩展arrayList,但是这种行为还在继续.

最后一次更新.所以我发现这个问题只有在后台运行notifyDatasetChanged时才会发生。然而,我只能减少每2秒一次的调用。使得问题更难解决但它仍然存在.

有线索吗?

EN

回答 3

Stack Overflow用户

发布于 2011-11-16 12:23:56

我想知道这个问题是否在您的OnClick函数中。是从OnClick定义中定义的'v‘获取标记,还是基于getView函数的第一行定义的范围?尝试将变量名更改为编译器更清楚的内容,并查看是否有相同的问题。

票数 0
EN

Stack Overflow用户

发布于 2011-11-16 13:10:30

我同意Wizetux关于为您的convertView变量使用更好的变量名的观点,使用一些东西而不是'v‘。

但是,我也认为,与其重写视图的onclick,您是否可以调用或使用您要扩展的ListActivity类的ListActivity(假设您的代码位于扩展ListActivity的类中)?

票数 0
EN

Stack Overflow用户

发布于 2011-11-16 18:19:08

您应该直接定义onClickListener,因为它是在同一个方法中声明和定义的。

另外,我不确定按钮定义和按钮的onClickListener是否应该在条件"If (v =null)“内.

直接定义onClickListener而不是使用变量的示例:

按钮b= ( Button )v.findViewById(R.id.b);

B.setOnClickListener(新的OnClickListener() {@覆盖公共无效onClick(View v) {// onClick代码} });

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8157806

复制
相关文章
MySQL使用存储过程插入批量测试数据
我们先来新建一个表,创建两个普通索引。 CREATE TABLE IF NOT EXISTS  `t` (   `id` int(11) NOT NULL,   `a` int(11) DEFAULT NULL,   `b` int(11) DEFAULT NULL,   PRIMARY KEY (`id`),   KEY `a` (`a`),   KEY `b` (`b`) ) ENGINE=InnoDB;
星哥玩云
2022/08/18
1.9K0
MySQL的存储过程_MySQL创建存储过程
在项目开发中,经常会遇到这样一种场景,当修改A表的一条数据时,需要关联修改B表、C表甚至其他更多表的数据,为什么会这样呢?
全栈程序员站长
2022/11/08
22.6K0
MySQL的存储过程_MySQL创建存储过程
mysql存储过程执行_mysql存储过程不执行
查看event是否开启: show variables like ‘%sche%’;
全栈程序员站长
2022/10/02
16.9K0
mysql使用存储过程demo批量插入数据10w+
先建一个简单的表,表里有 a、b 两个字段,并分别建上索引 CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `a` (`a`), KEY `b` (`b`) ) ENGINE=InnoDB; 存储过程脚本 delimiter ;; create procedure idata() begin d
高大北
2022/06/14
7800
MySQL:MySQL 存储过程
  <1>存储过程一旦调试完成后,就可以稳定运行,(前提是,业务需求要相对稳定,没有变化)
全栈程序员站长
2022/09/06
16.3K0
MySQL:MySQL 存储过程
MySQL存储过程
存储过程体包含了在过程调用时必须执行的语句,例如:dml、ddl语句,if-then-else和while-do语句、声明变量的declare语句等。
看、未来
2021/12/05
10.3K0
MySQL存储过程
SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
流柯
2018/08/30
13.9K0
MySQL存储过程
MySQL 存储过程
  MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的 SQL 语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
Demo_Null
2020/09/28
13.6K0
MySQL 存储过程
mysql存储过程
(如果存储过程存在删除后创建!如果不写只能执行一次) 2.DELIMITER //
用户5899361
2020/12/07
9.6K0
Mysql存储过程
1、添加存储过程 DELIMITER // CREATE PROCEDURE AddLLdata( in L_Longitude double , in L_Latitude double, IN L_Elevation double, IN L_LaserHeight double , IN L_FollowHeight double , IN L_PlaneId varchar(255), IN L_FlyDate longtext ) BEGIN insert into lldata(Lon
用户7053485
2020/06/19
9K0
MySQL存储过程
1、提高代码的重用性 2、简化操作 3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
程序猿的栖息地
2022/04/29
9K0
MySQL 存储过程
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升
星哥玩云
2022/09/15
37.4K0
MySQL 存储过程
mysql存储过程
1)“存储过程和函数”:类似于java中的方法,python中的函数。 2)“使用存储过程的好处”:   ① 提高代码的重用性;   ② 简化操作;   ③ 减少了编译次数,并且减少了和数据库服务器的连接次数,提高了效率。    注意:每执行一句sql语句,就会连接mysql服务器一次。 3)“存储过程的含义”:一组预先编译好的sQL语句的集合。
数据分析与统计学之美
2022/05/09
11.8K0
mysql存储过程
MySQL(存储过程)
存储过程是一组已经预先编译好的SQL语句的集合,可以理解为批处理语句(增加流程控制语句),一般在复杂的业务逻辑中才会使用存储过程。
全栈开发日记
2022/05/12
11.9K0
MySQL(存储过程)
MySQL存储过程
可惜啊!MySQL目前并不支持在SQL语句中存在流控制语句,例如上面的IF NOT EXISTS THEN END IF;让人痛心疾首。但是我们可以使用存储过程完成上面要求的功能。
恋喵大鲤鱼
2018/08/03
11.4K0
MySQL存储过程
【MySQL】存储过程
1、解耦合。数据库部分可交由专门的数据库管理人员去做,像前后端联合协作那样提供接口供后端调度。(这两天对后端开发又有了新的理解:作为前端和数据库之间数据转接的中间人。不论是哪种业务,后端架构如何发展,不都是为了数据走的更顺畅点吗?)作为后端开发人员,SQL是必备语言,但是如果条件允许,专业的事情交给专业的人来做。
看、未来
2021/12/20
8K0
mysql存储过程
CONCAT(person_no,"号犯人住", i , "号床位"); ---字符串拼接
用户5927264
2019/07/31
8.3K0
MySQL 存储过程
存储过程(Stored Procedure)是一种存储在数据库中的程序,可供外部程序调用的一种数据库对象。
恋喵大鲤鱼
2023/10/12
4570
MySQL 存储过程
Mysql存储过程
存储过程就是一条或者多条SQL语句的集合,可以视为批文件。它可以定义批量插入的语句,也可以定义一个接收不同条件的SQL。
用户3467126
2019/08/29
6.8K0
Mysql存储过程
存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件。虽然他们的作用不仅限于批处理。
Java架构师历程
2018/09/26
6.2K0

相似问题

MySQL存储过程优化

10

Mysql存储过程的查询优化

11

MYSQL存储过程插入失败

22

MySQL存储过程插入验证

12

MySQL存储过程插入问题

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档