簡體   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