PHP

[Android] setSingleChoiceItems, AlertDialog 이용해서 메뉴화면을 띄우는 버튼 구현하기

미스털이 사용자 2023. 9. 4. 16:14
반응형

 

 

다음과 같이 정렬버튼을 누르면

 

이렇게 나타나는 창을 구현해보고자 한다.

 

1) 버튼 xml

<Button
    android:checked="false"
    android:id="@+id/sortBtn"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="@drawable/sort_button"
    android:textColor="@drawable/selector_radio_text"
    android:button="@null"
    android:textAlignment="center"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    android:layout_marginRight="11dp"
    android:layout_marginLeft="10dp"
    android:text="가나다 순 정렬"
    android:layout_gravity="right|bottom"
    tools:ignore="RtlCompat" />
 

한편 background와 textColor xml은 다음과 같다.

 

background

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/colorBlackSub" />
            <stroke android:width="2dp" android:color="@color/colorBlackSub" />
            <corners android:radius="5dp"/>
        </shape>
    </item>
    <item android:state_checked="false">
        <shape android:shape="rectangle">
            <solid android:color="#CAE5FB" />
            <stroke android:width="2dp" android:color="@color/colorBlackSub" />
            <corners android:radius="5dp"/>
        </shape>
    </item>
</selector>
 

textColor

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="#FFFFFF">
    </item>
    <item android:state_checked="false" android:color="@color/colorBlackSub">
    </item>
</selector>
 

 

2) 버튼과 메뉴화면 구현

//변수
final int[] checkedItem = {0};

sortBtn = v.findViewById(R.id.sortBtn);
sortBtn.setOnClickListener(view -> {
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());

    //alertDialog.setIcon(R.drawable.image_logo);
    alertDialog.setTitle("정렬 기준을 선택하세요.");

    final String[] listItems = new String[]{"가나다 순", "최신 순", "오래된 순"};

    alertDialog.setSingleChoiceItems(listItems, checkedItem[0], (dialog, which) -> {
        checkedItem[0] = which;
        sortBtn.setText(listItems[which] + " 정렬");

        blva.clear();
        getBook(
                String.valueOf(svBox.getQuery()),
                check1.isChecked(),
                curr_tag1[0],
                which
        );

        dialog.dismiss();
    });

    alertDialog.setNegativeButton("닫기", (dialog, which) -> {
    });

    AlertDialog customAlertDialog = alertDialog.create();
    customAlertDialog.show();
});
 
 

여기서 중요한 부분은 다음과 같다.

 

2-1) 버튼 선언과 클릭 이벤트 생성

sortBtn = v.findViewById(R.id.sortBtn);
sortBtn.setOnClickListener(view -> {
 

 

2-2) 메뉴 화면 선언

    AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
    alertDialog.setTitle("정렬 기준을 선택하세요.");
 

 

2-3) 메뉴 선택시 이벤트

    alertDialog.setSingleChoiceItems(listItems, checkedItem[0], (dialog, which) -> {
        checkedItem[0] = which;
        sortBtn.setText(listItems[which] + " 정렬");

        blva.clear();
        getBook(
                String.valueOf(svBox.getQuery()),
                check1.isChecked(),
                curr_tag1[0],
                which
        );

        dialog.dismiss();
    });
 

 

2-4) 구현된 메뉴 화면 보여주게끔 하기

    AlertDialog customAlertDialog = alertDialog.create();
    customAlertDialog.show();
 

 

 

반응형