0

私はAndroidを自習していて、ボタンの使い方を学んでいます。次のように機能する単純なアップカウンターを作成しました。さまざまなテキストフィールドに文字列(例:1 2 3)を追加します。次に、それらをペアで比較したいと思います(1と2、1と3、2と3)。最初の文字列要素は最初のボタンに書き込まれ、2番目は2番目のボタンに書き込まれ、これらのボタンのいずれかを押した後、ボタンのタグを変更する必要があります(1と2があった場合は、1と3または2に変更する必要があります。 3など)、文字列要素のランクが高くなります。すべてうまくいくようですが、ボタンの追加で大きな間違いを犯していると思います。誰か助けてもらえますか?:)以下のコードで行ったように、ボタンリスナーを追加できますか?:) ありがとうございました!

public void counter() 
{
    int i = 0;
    int a = i + 1;

    for ( i = 0; i < candidates.size() - 1; i++ ) 
    {
            Log.d(TAG, "Setting button one tag: " + i );
            button_one.setTag(i);
            button_one.setText(candidates.get(i).name);

            for (a = i + 1; a < candidates.size(); a++)
            {
            Log.d(TAG, "Setting button two tag: " + a );
            button_two.setTag(a);
            button_two.setText(candidates.get(a).name);

            button_one.setOnClickListener(new View.OnClickListener() 
            {

                public void onClick(View view) {

                    /* Read the clicked tag */
                    int tag = (Integer) view.getTag();

                    /* Make higher rank */
                    candidates.get(tag).addRank();
                }
            });

            button_two.setOnClickListener(new View.OnClickListener() 
            {

                public void onClick(View view) {

                    /* Read the clicked tag */
                    int tag = (Integer) view.getTag();

                    /* Make higher rank */
                    candidates.get(tag).addRank();
                }
            }); 
            }       
    }
4

2 に答える 2

0

一般に、これらのボタンを動的に作成しない限り、クリックリスナーをループに追加する必要はありません。

同じボタンのループでクリックリスナーを設定すると、ループを循環するたびに、前の設定が上書きされるだけなので、このようにする意味はありません。

于 2012-08-15T08:36:23.907 に答える
0

AndyResが言ったことすべてに加えて、あなたは(candidates.size()* Candidates.size())数のOnClickListenersを作成しています。これは、メモリを占有する不要なオブジェクトの多くです。

OnClickListener mListener = new View.OnClickListener etc... etc... ループの外側に1つ作成する必要があります。おそらく、OnCreate()定義した直後に作成しbutton_one = (Button)findViewById(R.id.button_one);ます。button_one.setOnClickListener(mListener);

そうすれば、ボタンをいくつでも提供できるリスナーが1つだけになり、同じリスナーを再度設定する必要がなくなります。

于 2012-08-15T09:14:01.813 に答える