【问题标题】:How to restart an onclicklistener after switching layouts如何在切换布局后重新启动 onclicklistener
【发布时间】:2019-06-07 11:53:47
【问题描述】:

我刚开始使用 AndroidStudio 和 Java 进行编码,所以我还没有很好的掌握。基本上,当我单击withdrawBtn 时,我让它切换到不同的布局,然后当我单击它时,它应该切换回activity_main 布局。问题是一旦我回到activity_main 布局,点击withdrawBtn 不再做任何事情。我该如何解决这个问题,以便在我返回主布局后它可以工作。

withdrawBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    setContentView(R.layout.popup_window);
    text = (TextView) findViewById(R.id.textView);
    RelativeLayout rlayout = (RelativeLayout) findViewById(R.id.popup);
    rlayout.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
        setContentView(R.layout.activity_main);
        return true;
        }
    });

【问题讨论】:

  • 这可能是因为您正在创建没有点击监听器的新布局。我会建议你不要这样做。相反,只需创建一个相对布局并将可见性设置为 GONE。然后,当您单击按钮时,您可以将可见性设置为 VISIBLE。这样你就可以避免每次都创建新的布局

标签: java android android-studio button onclicklistener


【解决方案1】:

withdrawBtn 不再起作用的原因是您在按下按钮时重新膨胀了布局。

目前正在发生的事情是:

  1. 在原始 Activity 中,您已对 R.layout.activity_main 进行了膨胀,并在该布局膨胀后设置了 withdrawBtn.setOnClickListener()
  2. 你膨胀了R.layout.popup_window,这实际上用新布局替换了以前布局中的所有内容。
  3. 您设置rlayout.setOnTouchListener() 并让它切换到以前的布局。

但是,请记住,您正在用新布局替换旧布局......所以所有 setOnClickListenerssetOnTouchListeners 实际上都消失了。这就是您的 withdrawBtn 不再起作用的原因。这是因为它不再有 onClickListener 了。要解决此问题,您只需为其添加一个 onClickListener。

但是,尽管这是您问题的解决方案,但我必须指出,您在应用中导航的方式是个大问题。

不要继续你正在做的事情。

您在按下按钮时膨胀布局的方式并不是 Android 旨在打开新屏幕的方式。通过不断扩充新布局,您基本上忽略了所有以前用于该布局的代码......由于代码引用不再存在的视图而很容易导致崩溃。

在某种程度上,您让代码更混乱只是为了获得一个低效且可能存在错误的结果。

对于 Android,实际上有两种常用的导航到新屏幕的解决方案:

  1. 开始一个新的活动 - 您可以在您的应用中创建多个活动。每个 Activity 都应该精确地膨胀一个布局。如果您有 MainActivity 和 PopUpWindowActivity,您可以简单地使用startActivity(new Intent(MainActivity.this, PopUpWindowActivity.class)); 打开新的 PopupWindow Activity。在 PopupWindowActivity 中完成后,您只需调用 finish(); 即可关闭该 Activity 并返回 MainActivity。或者,如果您不想关闭 PopUpWindowActivity,也可以使用startActivity() 返回 MainActivity。以下是有关此的更多信息:https://developer.android.com/training/basics/firstapp/starting-activity#java
  2. 将单个 Activity 与多个 Fragment 一起使用 - 同样,每个 Activity 和 Fragments 应该只扩展一个布局。然而,关于 Fragments 的整个概念无法用简单的语言来解释,因此请在此处阅读更多信息:https://developer.android.com/guide/components/fragments

避免在每个活动中多次使用setContentView(),只有在别无选择时才使用...我可以 100% 自信地说,总会有更好的选择。

【讨论】:

    猜你喜欢
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2019-11-16
    相关资源
    最近更新 更多