【问题标题】:Android: Listener on array itemsAndroid:数组项上的侦听器
【发布时间】:2012-02-22 22:08:50
【问题描述】:

我创建了一个 For 循环,它为每个 ImageView 设置一个 ID 和一个 ClickListener。当点击被按下时, OnClickListner 要么似乎无法找到 ID,要么根本没有被调用。

    public int[] myResources = {R.id.bblock1, R.id.bblock2, R.id.bblock3, R.id.bblock4, R.id.bblock5, R.id.bblock6, R.id.bblock7, R.id.bblock8};
    ImageView[] bblock = new ImageView[7];

for(int i = 0; i==myResources.length; i++) {
                             bblock[i]=(ImageView)layout.findViewById(myResources[i]);
                             bblock[i].setOnClickListener(ActivityCheck);

                      } 



View.OnClickListener ActivityCheck = new View.OnClickListener(){
            public void  onClick  (View  v){
                if( v.getId() == (R.id.bblock1)){
                    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/#!/itz_jonno"));
                    startActivity(browserIntent);                   
                }

^^ OnClickListener 无法找到视图。 虽然,不使用数组和循环,下面的代码确实有效:

ImageView bblock1=(ImageView)layout.findViewById(R.id.bblock1);
bbblock1.setOnClickListener(ActivityCheck);

任何想法为什么数组不起作用,但标准代码可以?

【问题讨论】:

  • 使用条件 if ..switch..

标签: android arrays loops scope listener


【解决方案1】:
for(int i = 0; i==myResources.length; i++) {
                             bblock[i]=(ImageView)layout.findViewById(myResources[i]);
                             bblock[i].setOnClickListener(
                                new View.OnClickListener(){
            public void  onClick  (View  v){
                if( write u r checking condition here ){
                   start u r suitable activity here.                 
                }
                             );

                      } 

【讨论】:

  • 不需要在监听器中检查条件,因为每个视图都有专门的监听器
【解决方案2】:

i==myResources.length 更改为i < myResources.length

除非0 == myResources.length,否则当前循环将立即退出。

(不过,整个事件监听器是个不错的诱饵。)

【讨论】:

  • 不完全 - i
  • @barry 谢谢你,已修复:D,我不应该在清晨做这些事情(但至少错误会很清楚)。
  • 我的数组超出了 的范围
  • 那是因为你拥有的资源多于(空间)块。试试ImageView[] bblock = new ImageView[myResources.length];
  • 已排序!感谢 The Nail 和大家,ImageView[myResources.length] 是问题所在!
【解决方案3】:

除了循环问题之外,您的侦听器仅适用于 R.id.block1 ,它将忽略所有其他视图的事件。你到底想达到什么目的?

【讨论】:

  • 我希望 myResources 数组可以通过添加每个具有正确布局的 ImageView 来解决这个问题
  • 我有 8 个可点击的 ImageView,因此与其单独写出每一个,不如尝试创建一个很好的循环来整理大量代码
  • 但是你的 onClick 只处理 bblock1。
  • 对不起,我的错误,只是为了测试而写的!
猜你喜欢
  • 2021-01-21
  • 2017-05-28
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多