0

コードを介して onClickListener をアタッチするボタンがあります。フラグメントにあるため、コードを介してこれを行う必要があります。

リスナは、横向きモードでは問題なく動作しますが、縦向きモードでは機能しません。「カチッ」という音もありません。

私のxmlファイルでは、ボタンの最初の可視性を非表示に設定し、ユーザーがボタンと同じビューグループのラジオボタンをクリックしたときに表示されるようにしました。ラジオボタンの onclicklisteners は、ポートレート モードとランドスケープ モードの両方で問題なく動作しています。

xml の "android:visibility="invisible" コードを削除すると、onclickstener はポートレート モードで正常に動作します! しかし、もちろん、ユーザーがラジオボタンをクリックするまで非表示にする必要があります。 .

これが私のコードです:

private void setOnClickForSaveButton(View v) {

        Button changeFundsSave = (Button) v.findViewById(R.id.change_funds_save);
        changeFundsSave.setOnClickListener(saveListener);

    }

Button.OnClickListener saveListener = new Button.OnClickListener() {

        @Override
        public void onClick(View v) {

            //Get the rootview
            View rootView = v.getRootView();

            EditText changeFundsEdit = (EditText) rootView.findViewById(R.id.change_funds_edit);

            if(changeFundsEdit.getText().toString().equals("")) {
                new AlertDialog.Builder(getActivity())
                .setTitle( "" )
                .setMessage( "Enter the number of units" )
                .setPositiveButton( "Ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {


                    }
                })
                .show();
                return;


            }


        }
    };


    private void setOnClicksForRadioButtons(View v) {

        RadioButton rb1 = (RadioButton)v.findViewById(R.id.add_units);
        RadioButton rb2 = (RadioButton)v.findViewById(R.id.remove_units);
        RadioButton rb3 = (RadioButton)v.findViewById(R.id.set_units);

        rb1.setOnClickListener(addRemoveSetButtonListener);
        rb2.setOnClickListener(addRemoveSetButtonListener);
        rb3.setOnClickListener(addRemoveSetButtonListener);

    }





    OnClickListener addRemoveSetButtonListener = new OnClickListener() {

        @Override
        public void onClick(View v) {

            // Since we only have the radiobutton view, we need to get the parent
            View rootView = v.getRootView();

            //Make the controls visible
            TextView changeFundsText = (TextView) rootView.findViewById(R.id.change_funds_text);
            EditText changeFundsEdit = (EditText) rootView.findViewById(R.id.change_funds_edit);
            Button changeFundsSave = (Button) rootView.findViewById(R.id.change_funds_save);

            changeFundsText.setVisibility(View.VISIBLE);
            changeFundsEdit.setVisibility(View.VISIBLE);
            changeFundsSave.setVisibility(View.VISIBLE);


        }

    };


}
4

3 に答える 3

1

問題を解決しました!縦向きモードでは、他の人と同じように、1 つのフラグメントを別のアクティビティにロードします。習慣から、フラグメントをロードする前に setContentView(something) を呼び出していました! そのため、最終的に 2 つのレイアウトが重なり合ったり、表示ボタンと非表示ボタンが重なり合ったりして、問題が発生したに違いありません。くそー、フラグメントの概念が好きかどうかはわかりません。それらを使用するのは初めてです。しかし、慣れる前に、適切に配線する方法を学ぶ必要があるかもしれません:) 助けてくれてありがとう

于 2012-05-31T15:20:41.213 に答える
0

私の推測では

1) setOnClickForSaveButton で渡したビューの ViewById をもう一度見つけますか? 古いビューは破棄され、画面の向きを変更するとビューが作成されるため 2) R.id.change_funds_save に複数の ID がありますか 3) onclick(v) の最初の行にログを追加して、呼び出されましたが、予期していなかった別のブランチに移動しました。

于 2012-05-30T20:23:04.513 に答える
0

layout-landとから 2 つの個別の xml レイアウト ファイルを読み込んでいない限りlayout-port、横向きモードと縦向きモードの間に大きな違いはないはずです。そうは言っても、構成の変更が原因でアプリが正しく機能していない可能性が高いと思います。これが本当かどうか教えてください...つまり、アプリは最初は動作しますが、画面を回転させると動作しなくなりますか?

onClickListenerこれが当てはまる場合は、アクティビティのライフサイクルがビューやsにどのように影響しているかを調べる必要があります。

于 2012-05-30T20:30:47.023 に答える