Android/Android 일반

[Java] RecyclerView 구현

lipnus 2018. 11. 22. 02:36
반응형



1.Model

public class TestItem {
private String name;

public TestItem(String name) {
this.name = name;
}

public String getName() {
return name;
}
}



2. Adapter

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;

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

List<TestItem> mItems;

public RecyclerAdapter(List<TestItem> mItems) {
this.mItems = mItems;
}

@NonNull
@Override
//새로운 뷰홀더 생성. 각 아이템의 디자인레이아웃을 불러온다.
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parents, int viewType) {
View view = LayoutInflater.from(parents.getContext()).inflate(R.layout.layout_item, parents, false);
return new CustomViewHolder(view);
}


class CustomViewHolder extends RecyclerView.ViewHolder {
private TextView nameTv;

public CustomViewHolder(View itemView){
super(itemView);
nameTv = (TextView) itemView.findViewById(R.id.profile_textview);
}
}


@Override
//각각의 아이템을 바인딩한다
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
CustomViewHolder view = (CustomViewHolder) holder;
view.nameTv.setText( mItems.get(position).getName() );
}

@Override
//아이템의 개수를 반환한
public int getItemCount() {
return mItems.size();
}
}


3. MainActivity

package com.example.lipnus.recyclerview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

private String[] names = {"Charlie","Andrew","Han","Liz","Thomas","Sky","Andy","Lee","Park"};
private ArrayList<TestItem> mItems = new ArrayList<>();

private RecyclerView.Adapter adapter;
private RecyclerView recyclerView;


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

private void setRecyclerView() {

recyclerView = findViewById(R.id.recyclerview);

// 각 Item 들이 RecyclerView 의 전체 크기를 변경하지 않는 다면
// setHasFixedSize() 함수를 사용해서 성능을 개선
// 변경될 가능성이 있다면 false, 없다면 true
recyclerView.setHasFixedSize(true);

// RecyclerView에 Adapter를 설정해줍니다.
adapter = new RecyclerAdapter(mItems);
recyclerView.setAdapter(adapter);

// 지그재그형의 그리드 형식
//mainBinding.recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));

// 그리드 형식
//mainBinding.recyclerView.setLayoutManager(new GridLayoutManager(this,4));

// 가로 또는 세로 스크롤 목록 형식
recyclerView.setLayoutManager(new LinearLayoutManager(this));
setData();
}

private void setData(){
mItems.clear();

for(String name : names){
mItems.add(new TestItem(name));
}

// 데이터 추가가 완료되었으면 notifyDataSetChanged() 메서드를 호출해 데이터 변경 체크실행.
adapter.notifyDataSetChanged();
}

}


kotlin이랑 비교하면서 작성.

반응형

'Android > Android 일반' 카테고리의 다른 글

http 접근 허용  (0) 2018.11.30
에뮬레이터에서 localhost로 접속  (0) 2018.11.24
추천 라이브러리  (0) 2018.11.24
RecyclerView - onClick구현  (0) 2018.11.22
AndroidStudio Auto Import  (0) 2018.11.22