-1

我有一个带有主屏幕和一堆的应用程序buttons,因此listeners对于每个应用程序。用户单击其中一个后,会弹出buttons一个新的,其中包含一个。layoutlayoutback buttonlistener

问题是,每当用户按下 时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
                }
            });
        }
    });
}
4

3 回答 3

2

您不应使用 更改屏幕setContentView()。在 Android 中,通过使用 Malimo 推荐的 Fragments 或使用 Fragments 启动一个新的 Activity 来更改屏幕startActivity(new Intent(...))(这有点难做,但要好得多)。你打电话两次,setContentView()其中一次正在摧毁另一次。

于 2013-07-30T14:31:51.743 回答
1

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

于 2013-07-30T14:22:03.860 回答
0

我确信有一个method内置的 Android 允许你这样做,但我的第一个想法是recursion.

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

要解决这个问题,您必须在单击onCreate后再次调用该方法,因为这样它将 再次从主屏幕back button运行您的整个代码。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更改时都可以调用它。

于 2013-07-30T14:20:51.157 回答