일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- #리사이클러뷰 어댑터
- retrofit
- 사용법
- MVVM
- #안드로이드
- 키스토어
- #안드로이드 개발자 #안드로이드 신입 #개발자 이직 #안드로이드 면접 #신입 개발자
- 안드로이드 아키텍쳐
- 안드로이드 익명클래스
- #리사이클러뷰
- 구글맵안돼요
- 클린아키텍쳐
- 안드로이드
- #android #안드로이드 #glide #gif #이미지다운로드
- 안드로이드 메모리릭
- zeplin
- retrofit2
- #SMS API #안드로이드 SMS #SMS Retriever
- retrofi
- 리사이클러뷰 체크박스
- 메모리릭
- 빗버킷 #bitbucket #authorization failed #깃
- 제플린
- #ContentProvider #App DataShare
- 안드로이드해상도
- 레트로핏
Archives
- Today
- Total
땀이 삐질삐질 나는 개발 일기
Recyclerview Databinding 코드 예제 본문
안녕하세요. 삐질삐질 개발하는 개발자 삐질입니다.
오늘은 MVVM과 Databinding을 이용해 Recyclerview를 사용 하는 방법에 대해 알아보고자 합니다.
데이터 바인딩을 하기 위해서는 gradle에 추가해야 할 옵션이 있습니다.
https://ppizil.tistory.com/26 이 글부터 읽고 봐주세요 ~~~~
- MainActivity.java
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
private MemoViewModel viewModel;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
init();
}
public void init() {
viewModel = new MemoViewModel();
viewModel.onCreate();
binding.setViewmodel(viewModel);
binding.setLifecycleOwner(this);
}
}
- MemoViewModel.java
public class MemoViewModel {
private List<Memo> items;
private RecyclerAdapter adapter;
public MemoViewModel() {
if (items == null) {
items = new ArrayList<>();
}
if (adapter == null) {
adapter = new RecyclerAdapter(this);
}
testLogic();
}
public void testLogic() {
for (int i = 0; i < 30; i++) {
Memo memo = new Memo();
memo.setId(i);
memo.setMemoContext("테스트 메몸입니다. " + i);
memo.setTitle(i + "번째 메모 제목입니다.");
items.add(memo);
}
}
public void onCreate() {
adapter.notifyDataSetChanged();
}
public void onResume() {
}
public RecyclerAdapter getAdapter() {
return adapter;
}
public List<Memo> getItems() {
return items;
}
public String getTitle(int pos) {
return items.get(pos).getTitle();
}
public String getContents(int pos) {
return items.get(pos).getMemoContext();
}
}
- RecyclerAdapter.java
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private MemoViewModel viewModel;
public RecyclerAdapter(MemoViewModel viewModel) {
this.viewModel = viewModel;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ItemMemoBinding binding = ItemMemoBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
return new ItemViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ItemViewHolder) {
((ItemViewHolder) holder).bind(viewModel, position);
}
}
@Override
public int getItemCount() {
return viewModel.getItems() == null ? 0 : viewModel.getItems().size();
}
public static class ItemViewHolder extends RecyclerView.ViewHolder {
private ItemMemoBinding binding;
public ItemViewHolder(ItemMemoBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
public void bind(MemoViewModel viewModel, int pos) {
binding.setViewmodel(viewModel);
binding.setPos(pos);
binding.executePendingBindings();
}
}
}
- Memo.java
public class Memo {
int id;
String title;
String memoContext;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getMemoContext() {
return memoContext;
}
public void setMemoContext(String memoContext) {
this.memoContext = memoContext;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
- CustomAdapter.java
public class CustomAdapter {
@BindingAdapter("bind:verAdapter")
public static void verAdapter(RecyclerView recyclerView, RecyclerView.Adapter<?> adapter) {
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(recyclerView.getContext());
linearLayoutManager.setOrientation(RecyclerView.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter);
}
}
- Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<data>
<variable
name="viewmodel"
type="com.ppizil.recyclerviewtest.MemoViewModel" />
</data>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
bind:verAdapter="@{viewmodel.getAdapter()}"></androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
</layout>
- item_memo.xml
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variable
name="viewmodel"
type="com.ppizil.recyclerviewtest.MemoViewModel" />
<variable
name="pos"
type="Integer" />
</data>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="15dp">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewmodel.getTitle(pos)}"
android:textSize="14dp" />
<TextView
android:id="@+id/contents"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@{viewmodel.getContents(pos)}"
android:textColor="#000000"
android:textSize="18dp" />
</LinearLayout>
</layout>
안드로이드 초보 개발자를 위해 아래와 같은 카카오 오픈톡을 운영 중입니다.
'개발 Tip' 카테고리의 다른 글
SimpleDateFormat 과 Calendar대신 Joda Time (1) | 2019.06.05 |
---|---|
ConstraintLayout 원형 배치 (0) | 2019.06.05 |
Android EditText 상황에 따라 키보드 컨트롤 (0) | 2019.05.27 |
Android,Java의 this는 언제, 어떻게 쓰일까? (0) | 2019.05.21 |
[레트로핏]Retrofit2 @Field 와 @Body 차이 Feat.DTO (0) | 2019.05.17 |
Comments