상세 컨텐츠

본문 제목

[안드로이드] RecyclerView 다중선택 하는 방법

안드로이드

by aries574 2022. 4. 6. 16:10

본문


이번 시간에는 RecyclerView로 리스트를 생성하고, 다중 선택을

하는 방법을 알아보겠습니다. 


1. 실행 화면

2. 아이템 클래스 만들기

3. 아이템  화면 만들기

4. 아이템 어뎁터 만들기

5. 메인 화면 구성 activity_main.xml

6. 메인 코드 구현 MainActivity.java


1. 실행 화면

 

2. 아이템 클래스 만들기

public class Item {

    private String name;
    private boolean isSelected;

    public Item(String name, boolean isSelected) {
        this.name = name;
        this.isSelected = isSelected;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isSelected() {
        return isSelected;
    }

    public void setSelected(boolean selected) {
        isSelected = selected;
    }

}

2021.12.31 - [안드로이드] - [안드로이드 스튜디오] 자바 클래스 생성하는 방법

 

[안드로이드 스튜디오] 자바 클래스 생성하는 방법

이번 시간에는 안드로이드 스튜디오(AndroidStudio)에서 자바 클래스 생성하는 방법을 알아보겠습니다. 기본으로 안드로이드 스튜디오 프로젝트를 생성하면 아래 화면처럼 MainActivity가 기본으로 생

aries574.tistory.com

 

3. 아이템  화면 만들기

 list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="25sp"
        android:textStyle="bold" />

</LinearLayout>

 

 

4. 아이템 어뎁터 만들기

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder> {

    Context context;
    ArrayList<Item> arrayList;

    public ItemAdapter(Context context, ArrayList<Item> arrayList) {
        this.context = context;
        this.arrayList = arrayList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        LayoutInflater inflater = LayoutInflater.from(parent.getContext());

        View view = inflater.inflate(R.layout.list_item, parent, false);

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

        Item item = arrayList.get(position);
        holder.textView.setText(item.getName());

        ///선택값에 따른 배경색 설정
        if(item.isSelected()){

            holder.itemView.setBackgroundColor(Color.parseColor("#90CAF9"));
        }else{
            holder.itemView.setBackgroundColor(Color.parseColor("#EF9A9A"));
        }
    }

    @Override
    public int getItemCount() {
        return arrayList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{

        LinearLayout layout;

        TextView textView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            layout = itemView.findViewById(R.id.layout);
            textView = itemView.findViewById(R.id.textView);

            layout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    setMultipleSelection(getAdapterPosition());
                }
            });
        }
    }

    //다중 선택 기능
    private void setMultipleSelection(int adapterPosition){

        //반대의 값을 넣어준다.
        if(arrayList.get(adapterPosition).isSelected()){

            arrayList.get(adapterPosition).setSelected(false);
        }else{
            arrayList.get(adapterPosition).setSelected(true);
        }

        //데이터 적용
        notifyDataSetChanged();
    }
}

 

5. 메인 화면 구성 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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recyclerView"/>

</LinearLayout>

 

6. 메인 코드 구현 MainActivity.java

public class MainActivity extends AppCompatActivity {

    //선언
    RecyclerView recyclerView;

    ArrayList<Item> arrayList = new ArrayList<>();

    ItemAdapter adapter;

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

        //초기화
        recyclerView = findViewById(R.id.recyclerView);

        //초기화
        adapter = new ItemAdapter(MainActivity.this, getData());

        //레이아웃 설정
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        //구분선 설정
        recyclerView.addItemDecoration(new DividerItemDecoration(this,
                LinearLayoutManager.VERTICAL));

        //어뎁터 적용
        recyclerView.setAdapter(adapter);
    }

    //데이터 생성
    private ArrayList<Item> getData(){

        for(int i = 0; i < 10; i++){

            arrayList.add(new Item(i +"번쨰 아이템", false));
        }

        return arrayList;
    }
}//MainActivity

2022.04.02 - [안드로이드] - [안드로이드] 같은 그림 찾기 게임 만드는 방법 part1 - 화면 구성

 

[안드로이드] 같은 그림 찾기 게임 만드는 방법 part1 - 화면구성

앞으로 같은 그림 찾기 게임을 만들어 보겠습니다. 이번 시간에는 화면 구성을 해보겠습니다. 이 게임은 8장의 카드가 있고, 2장의 카드를 뒤집어서 같은 그림이면 성공, 틀리면 맞을 때까지 하

aries574.tistory.com

2022.04.03 - [안드로이드] - [안드로이드] 같은 그림 찾기 게임 만드는 방법 part2 - 이미지 섞기& 보여주기

 

[안드로이드] 같은 그림 찾기 게임 만드는 방법 part2 - 이미지 섞기& 보여주기

이번 시간에는 저번 포스팅에 이어서 하겠습니다. 화면을 구성했으니, 8개의 이미지 버튼에 이미지를 보여주도록 하겠습니다. 이미지는 나중에 똑같은 이미지를 맞춰야 하기 때문에 섞어서 보

aries574.tistory.com

2022.04.04 - [안드로이드] - [안드로이드] 같은 그림 찾기 게임 만드는 방법 part3 - 클릭&뒤집기

 

[안드로이드] 같은 그림 찾기 게임 만드는 방법 part3 - 클릭&뒤집기

이번 시간에는 저번 포스팅에 이어서 하겠습니다. 8개의 이미지를 섞어서 이미지 버튼에 보여주는 것까지 했습니다. 이번엔 처음에는 기본 이미지들로 보이다가 버튼을 클릭하면 해당 위치의

aries574.tistory.com

반응형

관련글 더보기

댓글 영역