2021/01/05 - [안드로이드] - [안드로이드] 다이얼로그(Dialog) 리스트(List)로 보여주는 방법
2021/01/06 - [안드로이드] - [안드로이드]다이얼로그(Dialog) 체크박스(CheckBox)로 보여주기
2021/01/07 - [안드로이드] - [안드로이드] 다이얼로그(Dialog) 사용자정의 (Custom) 화면으로 보여주기
2021/01/08 - [안드로이드] - [안드로이드]프래그먼트(Fragment) 간의 데이터 전달방법(Listener)
2021/01/09 - [안드로이드] - [안드로이드]바로가기메뉴(ContextMenu) 바탕화면 변경해보기
이번 시간에는 데이터를 리스트로 보여주는 RecyclerView와
리스트를 선택할 때 액션을 할 수 있게 ContextMenu를 적용하는 예제를 만들어 보겠습니다.
1. 라이브러리 추가
이번 예제를 하기 위해서는 design 라이브러리가 필요하며 사용방법은 아래 링크를 참조하시면 됩니다.
2020/12/19 - [안드로이드] - [안드로이드]라이브러리 찾아 등록하는 방법
com.android.support:design으로 검색하시면 됩니다.
2-1 예제 데이터 추가( res -> values -> strings.xml)
<resources>
<string name="app_name">RecyclerView</string>
<string-array name="animal_names">
<item>pig</item>
<item>cat</item>
<item>dog</item>
<item>rabbit</item>
</string-array>
</resources>
2-1 예제 아이콘 추가(res -> drawable)
아이콘 저장하고 drawable폴더에 저장하시면 됩니다.
3. 데이터 클래스 추가(Animal.java)
파일명은 Animal로 했습니다.
public class Animal {
private int animal_id;
private String animal_name;
public Animal(int animal_id, String animal_name) {
this.animal_id = animal_id;
this.animal_name = animal_name;
}
public int getAnimal_id() {
return animal_id;
}
public void setAnimal_id(int animal_id) {
this.animal_id = animal_id;
}
public String getAnimal_name() {
return animal_name;
}
public void setAnimal_name(String animal_name) {
this.animal_name = animal_name;
}
}
4. 리스트 화면 추가(item_layout.xml)
파일명은 item_layout로 했습니다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_marginTop="3dp"
android:elevation="6dp"
app:cardCornerRadius="6dp"
android:layout_margin="6dp"
android:id="@+id/mCardView"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_gravity="center"
android:layout_marginLeft="20dp"
android:scaleType="centerCrop"
android:id="@+id/animal_album"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:textSize="16sp"
android:textStyle="bold"
android:layout_marginLeft="100dp"
android:id="@+id/animal_name"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
5. 어뎁터생성(Adapter) RecyclerAdapter.java)
화면과 데이터를 연결해주는 기능을 합니다.
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewholder> {
private List<Animal> animals = new ArrayList<>();
public RecyclerAdapter(List<Animal> animals){
this.animals = animals;
}
@NonNull
@Override
public MyViewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
return new MyViewholder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewholder holder, int position) {
holder.animalName.setText(animals.get(position).getAnimal_name());
holder.animalImage.setImageResource(animals.get(position).getAnimal_id());
}
@Override
public int getItemCount() {
return animals.size();
}
public static class MyViewholder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener{
ImageView animalImage;
TextView animalName;
CardView cardView;
public MyViewholder(@NonNull View itemView) {
super(itemView);
animalImage = itemView.findViewById(R.id.animal_album);
animalName = itemView.findViewById(R.id.animal_name);
cardView = itemView.findViewById(R.id.mCardView);
cardView.setOnCreateContextMenuListener(this);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.setHeaderTitle("아이템을 선택하세요");
menu.add(this.getAdapterPosition(), 121, 0, "아이템 삭제");
menu.add(this.getAdapterPosition(), 122, 1, "아이템 추가");
}
}
public void removeItem(int position){
animals.remove(position);
notifyDataSetChanged();
}
}
6. 메인화면 구현(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mRecyclerView"
android:scrollbars="vertical"
/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
7. 메인코드 구현(MainActivity.java)
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
//이미지
private int[] animal_id = {R.drawable.cat, R.drawable.dog, R.drawable.pig, R.drawable.rabbit};
//동물목록
private String [] animal_names;
//동물리스트
private List<Animal> animals = new ArrayList<>();
private RecyclerView recyclerView;
private RecyclerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
animal_names = getResources().getStringArray(R.array.animal_names);
recyclerView = findViewById(R.id.mRecyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(true);
getAnimal();
adapter = new RecyclerAdapter(animals);
recyclerView.setAdapter(adapter);
}
public void getAnimal(){
int count = 0;
for(String animalName : animal_names){
Animal animal = new Animal(animal_id[count], animalName);
animals.add(animal);
count++;
}
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case 121:
displayMessage("아이템 삭제");
adapter.removeItem(item.getGroupId());
return true;
case 122:
displayMessage("아이템 추가");
return true;
default:
return super.onContextItemSelected(item);
}
}
public void displayMessage(String message){
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
}
8. 실행화면
2021/01/05 - [안드로이드] - [안드로이드] 다이얼로그(Dialog) 리스트(List)로 보여주는 방법
2021/01/06 - [안드로이드] - [안드로이드]다이얼로그(Dialog) 체크박스(CheckBox)로 보여주기
2021/01/07 - [안드로이드] - [안드로이드] 다이얼로그(Dialog) 사용자정의 (Custom) 화면으로 보여주기
2021/01/08 - [안드로이드] - [안드로이드]프래그먼트(Fragment) 간의 데이터 전달방법(Listener)
2021/01/09 - [안드로이드] - [안드로이드]바로가기메뉴(ContextMenu) 바탕화면 변경해보기
[안드로이드] 카메라(Camera) 사진(Image) 찍고 가져오기 (0) | 2021.01.12 |
---|---|
[안드로이드] 동적 메뉴(ActionMode) 만들어 보기 (0) | 2021.01.11 |
[안드로이드]바로가기메뉴(ContextMenu) 바탕화면 변경해보기 (0) | 2021.01.09 |
[안드로이드]프래그먼트(Fragment) 간의 데이터 전달방법(Listener) (0) | 2021.01.08 |
[안드로이드] 다이얼로그(Dialog) 사용자정의 (Custom) 화면으로 보여주기 (0) | 2021.01.07 |
댓글 영역