3

DialogFragment を使用して作成したカスタマイズされたダイアログがあります。1 つのボタンと編集テキストを取得したビューを使用します。私の編集テキストでは、編集テキストに値がある場合、ボタンが表示されるようになるテキストウォッチャーを実装しました。

public  class ShowDialog extends DialogFragment {

private Button btnShowBalance;
private EditText balanceInquiryPinInput;

public ShowDialog(){

}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View myView = inflater.inflate(R.layout.fragment_balance_inquiry,null);

    btnShowBalance= (Button) myView.findViewById(R.id.btnShowBalance);

    balanceInquiryPinInput = (EditText) myView.findViewById(R.id.et_balance_inquiry_pin);

    balanceInquiryPinInput.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            if(s.length() > 0){
                btnShowBalance.setVisibility(View.VISIBLE);
            }else{
                btnShowBalance.setVisibility(View.INVISIBLE);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

     btnShowBalance.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showBalance(balanceInquiryPinInput,nameview,ShowDialog.this);
        }
    });


    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setView(myView);

    // Create the AlertDialog object and return it
    return builder.create();
}

}

問題

画面の向きを(たとえば)横向きに変更すると、向きを変更する前に編集テキストに何かを入力した場合、入力したものはすべて横向きに表示され、ボタンは表示されますが、クリックできなくなります。クリックできません。ダイアログウィンドウの外側のどこかを押すか、戻るボタンを押してダイアログを削除し、再度作成する必要があります。

画面の向きを変更してもボタンをクリックできるようにするにはどうすればよいですか?

注:方向を変更する前にクリックできます。

編集

私のダイアログは、アクティビティではなくフラグメントにあるボタンによってアクティブ化されます。後者はアクティビティの実装であり、その実装は私の見解には信頼できず、問題の状態であるため、この質問はこれの複製ではありません(ボタン)

カスタム ダイアログ レイアウトの xml を編集

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#044848"
>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:background="@drawable/check_balance"
    >

    <EditText
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:id="@+id/et_balance_inquiry_pin"
        android:layout_marginTop="5dp"
        android:gravity="center"
        android:background="@drawable/enter_pin_textview"
        android:inputType="numberPassword"/>

    <Button
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:text="OK"
        android:id="@+id/btnShowBalance"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="10dp"
        android:textColor="@android:color/white"
        android:textSize="20sp"
        android:background="@drawable/show_balance_ok_button"
        android:visibility="invisible" />

</LinearLayout>

4

2 に答える 2

0

Dialog でクリック リスナーをボタンに追加する場合は、onConfigurationChanged の後に作成される新しいボタン オブジェクトに onclick を追加する必要があります。

xml でクリック リスナーを設定することは、次のような問題を解決するための良い方法です。

このようにxmlでクリックして設定します:

<Button
android:id="@+id/addnote"
android:onClick="closeDialog"
/>

今すぐアクティビティコール onclick 必要な場所で

public void closeDialog(View view) {
dialogObject.dismiss();
} 

xml で on click を使用した後、setOnClickListener を呼び出す必要はありません

于 2015-12-08T06:59:37.347 に答える