我刚刚开始使用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;
}
});
答案 0 :(得分:0)
withdrawBtn不再起作用的原因是因为您在按下按钮时重新膨胀了布局。
目前正在发生的事情是:
R.layout.activity_main
进行了膨胀,并在该布局膨胀之后设置了withdrawBtn.setOnClickListener()
。 R.layout.popup_window
上充气,实际上会将之前布局中的所有内容替换为新布局。rlayout.setOnTouchListener()
,并将其切换到以前的布局。但是,请记住,正在发生的事情是您正在用新的布局替换旧的布局...因此所有setOnClickListeners
和setOnTouchListeners
实际上都消失了。这就是为什么您的 withdrawBtn 不再起作用的原因。这是因为它不再具有onClickListener。要解决此问题,您只需向其添加onClickListener。
但是,尽管这是解决您问题的方法,但我必须指出,您浏览应用程序的方式是一个巨大的问题。
请勿继续执行您的操作。
按下按钮时放大布局的方式与Android打开新屏幕的方式无关。通过不断地增加新的布局,您实际上就无视了该布局所需要的所有先前代码...由于引用不再存在的视图的代码,很容易导致崩溃。
从某种意义上说,您是在使代码杂乱无章,仅是为了获得一个结果,该结果使您的效率低下并且可能存在错误。
对于Android,实际上有两种常用的导航到新屏幕的解决方案:
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 避免在每个“活动”中多次使用setContentView()
,只有在没有其他选择的情况下才使用它……我可以百分百确信地说,总会有更好的选择。