본문 바로가기
안드로이드 자바

[Java][Android] ChipGroup에 Chip 동적 추가하기 (+ 버튼)

by teamnova 2025. 3. 30.
728x90

안녕하세요, 

 

오늘은  ChipGroup 에 +버튼을 만들고, 동적으로 Chip 을 추가하는 예제를 만들어보도록 하겠습니다. 

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <com.google.android.material.chip.ChipGroup
        android:id="@+id/chipGroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:singleLine="false"
        app:chipSpacing="8dp" />
</LinearLayout>


MainActivity.java

public class MainActivity extends AppCompatActivity {

    private ChipGroup chipGroup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        chipGroup = findViewById(R.id.chipGroup);
        addPlusChip();
    }

    // "+" Chip 추가
    private void addPlusChip() {
        Chip plusChip = new Chip(this);
        plusChip.setText("+");
        plusChip.setChipIconTintResource(android.R.color.darker_gray);
        plusChip.setCloseIconVisible(false);
        plusChip.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showInputDialog();
            }
        });

        chipGroup.addView(plusChip);
    }

    // 다이얼로그 표시
    private void showInputDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("새로운 Chip 추가");

        final EditText input = new EditText(this);
        input.setHint("텍스트 입력...");
        builder.setView(input);

        builder.setPositiveButton("추가", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String chipText = input.getText().toString().trim();
                if (!chipText.isEmpty()) {
                    addChip(chipText);
                    dialog.dismiss();
                }
            }
        });

        builder.setNegativeButton("취소", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();
    }

    // Chip 추가
    private void addChip(String text) {
        Chip chip = new Chip(this);
        chip.setText(text);
        chip.setCloseIconVisible(true);

        // Chip 삭제 기능 추가
        chip.setOnCloseIconClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chipGroup.removeView(chip);
            }
        });

        // 기존 "+" Chip 제거 후 추가
        chipGroup.removeViewAt(chipGroup.getChildCount() - 1);
        chipGroup.addView(chip);
        addPlusChip();
    }
}

 

 

시연영상 입니다.