切换布局后如何重新启动onclicklistener

时间:2019-01-13 01:54:48

标签: java android android-studio button onclicklistener

我刚刚开始使用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;
        }
    });

1 个答案:

答案 0 :(得分:0)

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

目前正在发生的事情是:

  1. 在原始活动中,您将R.layout.activity_main进行了膨胀,并在该布局膨胀之后设置了withdrawBtn.setOnClickListener()
  2. 您在R.layout.popup_window上充气,实际上会将之前布局中的所有内容替换为新布局。
  3. 您设置了rlayout.setOnTouchListener(),并将其切换到以前的布局。

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

但是,尽管这是解决您问题的方法,但我必须指出,您浏览应用程序的方式是一个巨大的问题。

请勿继续执行您的操作。

按下按钮时放大布局的方式与Android打开新屏幕的方式无关。通过不断地增加新的布局,您实际上就无视了该布局所需要的所有先前代码...由于引用不再存在的视图的代码,很容易导致崩溃。

从某种意义上说,您是在使代码杂乱无章,仅是为了获得一个结果,该结果使您的效率低下并且可能存在错误。

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

  1. 开始新的活动-允许您在应用中创建多个活动。每个活动都应仅膨胀一个布局。如果您具有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. 将单个活动与多个片段一起使用-同样,每个活动和片段都应仅填充一个布局。但是,关于Fragments的整个概念太多了,无法用简单的词来解释,因此请在此处详细了解:https://developer.android.com/guide/components/fragments

避免在每个“活动”中多次使用setContentView(),只有在没有其他选择的情况下才使用它……我可以百分百确信地说,总会有更好的选择。