-1

私はホーム画面とその上にたくさんのアプリを持っているbuttonsのでlisteners、それぞれに. ユーザーが のいずれかをクリックするbuttonsと、新しいlayoutが表示され、 とlayoutback buttonありlistenerます。

問題は、ユーザーが を押すたびback buttonに、ホーム画面layoutが再び表示されますがlistenersbuttonsもう何も機能しないことです。

サンプルコードは次のとおりです。

@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

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 buttonlisteners

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に、独自のを配置することもお勧めします。methodlayout

于 2013-07-30T14:20:51.157 に答える