ImageView上的setOnClickListener需要点击两次才能生效。

3

我已经使用setonclicklistener创建了ImageView,但需要点击两次图像才能正常工作。我不明白这是为什么。哎呀!

我的ImageView xml在RelativeLayout中:

        <ImageView
            android:id="@+id/bNext"
            android:layout_width="64.785dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:src="@drawable/next" >
        </ImageView>

我的ImageView代码:

public class MainActivity extends Activity implements OnClickListener {        
    ...........    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
            ......
        final ImageView next = (ImageView) findViewById(R.id.bNext);    
        ...............
        next.setOnClickListener(this);    
    }    
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        ...................
        case R.id.bNext:
            if (j != imageCount) {
                image = imageArray[j];
                rl.setBackgroundResource(image);
                j = j + 1;
            }
            break;
        }
    }    
}

编辑:如所请求,以下是完整的代码:

public class MainActivity extends Activity implements OnClickListener {

    RelativeLayout rl;
    int i, j = 0;
    final int imageArray[] = { R.drawable.w1, R.drawable.w2, R.drawable.w3 };
    int image;
    final int imageCount = 3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);

        final int imageArray[] = { R.drawable.w1, R.drawable.w2, R.drawable.w3 };
        image = imageArray[0];

        rl = (RelativeLayout) findViewById(R.id.rlBackground);

        final ImageView back = (ImageView) findViewById(R.id.bBack);
        final ImageView save = (ImageView) findViewById(R.id.bSave);
        final ImageView next = (ImageView) findViewById(R.id.bNext);

        back.setOnClickListener(this);
        save.setOnClickListener(this);
        next.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.bBack:
            if (j != 0) {
                image = imageArray[j - 1];
                rl.setBackgroundResource(image);
                j = j - 1;
            }
            break;
        case R.id.bSave:
            BitmapFactory.Options opts = new BitmapFactory.Options();
            opts.inSampleSize = 2;
            Bitmap bm = BitmapFactory.decodeResource(getResources(), image,
                    opts);
            SaveImage savefile = new SaveImage();
            savefile.SaveImagee(this, bm);
            break;
        case R.id.bNext:
            if (j != imageCount) {
                image = imageArray[j];
                rl.setBackgroundResource(image);
                j = j + 1;
            }
            break;
        }
    }

}

j变量从哪里来?你应该发布更完整的代码。 - nio
我省略了不重要的代码,一切都正常工作。当我运行应用程序时,我需要点击两次“下一个”按钮才能触发按钮的功能,我希望在我单击一次时它就能够工作,但我无法弄清楚为什么需要点击两次。我只保留与onClick事件相关的代码。 - user1816780
1个回答

2
我认为问题出在焦点上。您需要按一次来使View获得焦点,然后再按一次才能触发onClick()。将您的ImageView更改为ImageButton,您就不会遇到这个问题,因为Buttons被设计为具有焦点。
只需更改:
android:src="@drawable/next"

to

android:background="@drawable/next"

你也可以实现一个onTouchListener并将其设置在ImageView上,然后监听关键行动来确定要做什么,但我不确定这是否值得。

这里我找到了一个示例,可能会有所帮助。


1
它需要被点击两次。Button也是如此。我会尝试使用onTouchListener来解决这个问题。 - user1816780

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接