繁体   English   中英

Android-如何使按钮多次收听

[英]Android - How to make buttons listen more than one time

我有一个带有主屏幕和一堆buttons的应用程序,因此每个listeners器都有。 用户单击其中一个buttons ,将显示一个新的layout ,并且该layout具有带有listenerback button

问题在于,每当用户按下“ back button ,都会back button主屏幕layout ,但是没有任何listeners可以使用该buttons

这是一些示例代码:

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); // return to home screen

    // sets up a listener for when the GCF main screen button is clicked.
    GCFButton.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {
            setContentView(R.layout.gcf); // change to the gcf layout
            Button back = (Button)findViewById(R.id.btnBack); // set up the back button in the gcf layout
            back.setOnClickListener(new View.OnClickListener() // put a listener on back button
            {
                public void onClick(View v) 
                {
                    setContentView(R.layout.main); // return to home screen
                }
            });

            Button GCFCalculate = (Button)findViewById(R.id.btnCalculate); // set up the gcf button in the gcf layout
            GCFCalculate.setOnClickListener (new View.OnClickListener() // put listener on gcf button in gcf layout
            {
                public void onClick(View v)
                {
                    // do stuff
                }
            });
        }
    });
}

您不应该使用setContentView()更改屏幕。 在Android中,通过使用startActivity(new Intent(...))或使用Malimo推荐的片段开始新的活动来更改屏幕(这样做有点困难,但效果更好)。 您调用两次setContentView() ,其中一个销毁另一个。

我认为您应该对contentview使用片段。 因此每个片段都将对其contentview负责,并且每次显示时都可以添加侦听器... http://developer.android.com/guide/components/fragments.html

我确定Android内置了一种method ,您可以执行此操作,但是我的第一个想法是recursion

问题在于您的侦听器位于onCreate方法中,这意味着在运行它们之后,它们将不再重复。 在“ back button listener ,当您将content view再次设置为主屏幕时,将不会再次设置listeners ,只会更改 content view

要解决此问题,一旦单击“ back button ,您将不得不再次调用onCreate方法,因为这样它将再次在主屏幕上与所有listeners一起运行您的整个代码。

我建议将所有listeners放在一个listeners()方法中,然后在需要时recursively调用该方法。 需要在onCreate(...)以及单击back button时调用它:

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    listeners(); // set up all the listeners for the buttons    
}

public void listeners()
{
    setContentView(R.layout.main); // return to home screen
    // sets up a listener for when the GCF main screen button is clicked.
    GCFButton.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {
            setContentView(R.layout.gcf); // change to the gcf layout
            Button back = (Button)findViewById(R.id.btnBack); // set up the back button in the gcf layout
            back.setOnClickListener(new View.OnClickListener() // put a listener on back button
            {
                public void onClick(View v) 
                {
                    listeners(); // recursively call the listeners again to 'start over'
                }
            });

            Button GCFCalculate = (Button)findViewById(R.id.btnCalculate); // set up the gcf button in the gcf layout
            GCFCalculate.setOnClickListener (new View.OnClickListener() // put listener on gcf button in gcf layout
            {
                public void onClick(View v)
                {
                    // do stuff
            }
        });
    }
});

}

我还建议将back button listener置于其自己的method ,以便每次更改layout时都可以调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM