【问题标题】:Android: OnClickListener, OnTouchListener crashesAndroid:OnClickListener、OnTouchListener 崩溃
【发布时间】:2013-07-04 19:19:08
【问题描述】:

我想测试如何在 Android 上动态更改视图,而无需启动其他活动。

所以我写了这段代码,当我同时实现 OnTouchListener 和 OnClickListener 时它会崩溃,但如果我只使用其中一个,它工作得很好(尽管它没有做我想要做的事情)。

public class Test extends Activity implements OnTouchListener, OnClickListener {

ImageView image;
Button ret;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.displaytest);

    image = (ImageView) this.findViewById(R.id.image01);
    ret = (Button) this.findViewById(R.id.ret);

    image.setOnTouchListener(this);
    ret.setOnClickListener(this);
}

@Override
public boolean onTouch(View v, MotionEvent event) {

    int action = event.getAction();

    switch(action)
    {
    case MotionEvent.ACTION_DOWN:
        setContentView(R.layout.returnd);
        break;
    }

    return true;
}

@Override
public void onClick(View v) {

    setContentView(R.layout.displaytest);
}

}

基本上,我只是想显示一张图片,当用户触摸它时,更改视图以显示一个按钮,让您返回主视图。

顺便说一句,我是 Android 新手,所以我认为这应该是一个非常蹩脚的错误。帮助将不胜感激。谢谢

【问题讨论】:

  • 请显示来自 LogCat 的错误输出。很难说哪里出了问题

标签: android layout view onclicklistener ontouchlistener


【解决方案1】:

请删除 onTouch 和 onCLick 事件中的 setContentView() 方法。它会导致问题。您不能在活动中多次设置内容视图。您可以使用任何其他方法查看 ui 中的动态变化,例如在 textVIew 中更改文本、在 imageview 中更改颜色或更改图像等。

【讨论】:

    【解决方案2】:

    我认为你不能像这样多次致电setContentView

    您应该让按钮在布局中不可见,并在触摸图片时使其可见,而不是加载新布局。

    【讨论】:

      【解决方案3】:

      如果没有堆栈跟踪 (logcat),您将无法获得任何高质量的答案。

      顺便说一句:新布局 = 新 Activity(或 Fragment)。 setContentView()

      期间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-02
        • 1970-01-01
        • 2011-11-22
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        • 2016-11-09
        • 2018-12-11
        相关资源
        最近更新 更多