Main Activity의 기본 (Recycler view 편)
Main Activity의 기본 (Recycler view 편)
Recycler view를 이용하여 여러 리스트가 표시될 때 어떻게 생성되어 화면에 출력되는지를 정리해 보았다.
이번에 만든 view
onCreate()
액티비티가 생성되었을 때 행해지므로, activity 당 1번 밖에 읽혀지지 않는다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycler_view);
}
온레스메()
화면에 비추어졌을 때 onResume이 로드된다.
onCreate()와 달리 activity가 생성된 후 다른 화면에서 다시 맨 위 화면이 되었을 때 다시 로드되므로, 화면이 바뀔 때마다 다시 읽어주고 싶은 것은 onResume에 쓰고 activity 생성 된 시점에서 한 번만 읽어야하는 것은 onCreate ()에 씁니다.
@Override
protected void onResume() {
super.onResume();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
RecyclerViewAdapter adapter = new RecyclerViewAdapter(this);
recyclerView.setAdapter(adapter);
adapter.addItems(createData());
}
createData()
userInfo
에 격납한다 @NonNull
private List<UserInfo> createData() {
List<UserInfo> userInfos = new ArrayList<>();
UserInfo userInfo1 = new UserInfo(getString(R.string.sweets1), R.drawable.one);
UserInfo userInfo2 = new UserInfo(getString(R.string.sweets2), R.drawable.two);
UserInfo userInfo3 = new UserInfo(getString(R.string.sweets3), R.drawable.three);
UserInfo userInfo4 = new UserInfo(getString(R.string.sweets4), R.drawable.four);
UserInfo userInfo5 = new UserInfo(getString(R.string.sweets5), R.drawable.five);
UserInfo userInfo6 = new UserInfo(getString(R.string.sweets6), R.drawable.six);
UserInfo userInfo7 = new UserInfo(getString(R.string.sweets1), R.drawable.one);
UserInfo userInfo8 = new UserInfo(getString(R.string.sweets1), R.drawable.one);
UserInfo userInfo9 = new UserInfo(getString(R.string.sweets1), R.drawable.one);
UserInfo userInfo10 = new UserInfo(getString(R.string.sweets1), R.drawable.one);
UserInfo userInfo11 = new UserInfo(getString(R.string.sweets1), R.drawable.one);
UserInfo userInfo12 = new UserInfo(getString(R.string.sweets1), R.drawable.one);
userInfos.add(userInfo1);
userInfos.add(userInfo2);
userInfos.add(userInfo3);
userInfos.add(userInfo4);
userInfos.add(userInfo5);
userInfos.add(userInfo6);
userInfos.add(userInfo7);
userInfos.add(userInfo8);
userInfos.add(userInfo9);
userInfos.add(userInfo10);
userInfos.add(userInfo11);
userInfos.add(userInfo12);
return userInfos;
}
static class UserInfo {
final String name;
//final String timeStamp;
@IdRes
final Integer icon;
UserInfo(String name, Integer icon) {
this.name = name;
//this.timeStamp = timeStamp;
this.icon = icon;
}
}
RecyclerViewAdapter
RecyclerViewAdapter()
// 0番目
public RecyclerViewAdapter(@NonNull Context context) {
this.inflater = LayoutInflater.from(context);
this.data = new ArrayList<>();
}
CustomViewHolder
static class CustomViewHolder extends RecyclerView.ViewHolder {
ImageView iconView;
TextView nameView;
// TextView timeStampView;
public CustomViewHolder(View itemView) {
super(itemView);
iconView = (ImageView) itemView.findViewById(R.id.photo);
nameView = (TextView) itemView.findViewById(R.id.name);
// timeStampView = (TextView) itemView.findViewById(R.id.time_stamp);
}
}
onCreateViewHolder
리스트의 position을 viewType으로 취득해, 리스트 마다 레이아웃을 삽입한다(이 경우에서는 우기로 레이아웃을 나누고 있으므로 우기 마다 조건 분기로 별개의 레이아웃을 삽입하고 있다)
// 2番目
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View recyclerViewListItem = null;
if (viewType == VIEW_TYPE1) {
recyclerViewListItem = inflater.inflate(R.layout.recycler_view_list_item, parent, false);
} else {
recyclerViewListItem = inflater.inflate(R.layout.recycler_view_list_item2, parent, false);
}
CustomViewHolder customViewHolder = new CustomViewHolder(recyclerViewListItem);
return customViewHolder;
}
onBindViewHolder
// 3番目
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
CustomViewHolder customViewHolder = (CustomViewHolder) holder;
customViewHolder.nameView.setText(data.get(position).name);
customViewHolder.iconView.setImageResource(data.get(position).icon);
}
getItemViewType
@Override
public int getItemViewType(int position) {
if (position % 2 == 0) {
return VIEW_TYPE1;
}
return VIEW_TYPE2;
}
getItemCount
// 1番目
@Override
public int getItemCount() {
return data.size();
}
addItems
data
에 들어있는 데이터를 name
변수에 저장하는 메소드 adapter.addItems(createData())
의 method로 사용되고 있다 adapter.addItems(createData());
때 사용하는 어댑터에 데이터를 삽입하는 방법 public void addItems(@NonNull List<UserInfo> name) {
this.data.addAll(name);
notifyDataSetChanged();
}
@override 란 무엇입니까?
override
주석 (annotation) @NonNull 은 method의 앞에 붙여 놓는 것으로, 이 method는 null를 돌려주지 않는다고 하는 것을 어노테이션 해 준다.
getIndentifier()를 사용하여 단순화
이 부분을 ....
List<UserInfo> userInfos = new ArrayList<>();
UserInfo userInfo1 = new UserInfo(getString(R.string.sweets1), R.drawable.view1);
UserInfo userInfo2 = new UserInfo(getString(R.string.sweets2), R.drawable.view2);
UserInfo userInfo3 = new UserInfo(getString(R.string.sweets3), R.drawable.view3);
UserInfo userInfo4 = new UserInfo(getString(R.string.sweets4), R.drawable.view4);
UserInfo userInfo5 = new UserInfo(getString(R.string.sweets5), R.drawable.view5);
UserInfo userInfo6 = new UserInfo(getString(R.string.sweets6), R.drawable.view6);
UserInfo userInfo7 = new UserInfo(getString(R.string.sweets1), R.drawable.view1);
UserInfo userInfo8 = new UserInfo(getString(R.string.sweets2), R.drawable.view2);
UserInfo userInfo9 = new UserInfo(getString(R.string.sweets3), R.drawable.view3);
UserInfo userInfo10 = new UserInfo(getString(R.string.sweets4), R.drawable.view4);
UserInfo userInfo11 = new UserInfo(getString(R.string.sweets5), R.drawable.view5);
UserInfo userInfo12 = new UserInfo(getString(R.string.sweets6), R.drawable.view6);
userInfos.add(userInfo1);
userInfos.add(userInfo2);
userInfos.add(userInfo3);
userInfos.add(userInfo4);
userInfos.add(userInfo5);
userInfos.add(userInfo6);
userInfos.add(userInfo7);
userInfos.add(userInfo8);
userInfos.add(userInfo9);
userInfos.add(userInfo10);
userInfos.add(userInfo11);
userInfos.add(userInfo12);
return userInfos;
이렇게 다시 쓰기
List<UserInfo> userInfos = new ArrayList<>();
int strId, viewId;
String resViewName, resStrName;
Resources res = getResources()
for(int i = 1, i < 13; i++){
if(i > 6){
resStrName = "sweets" + i - 6;
resViewName = "view" + i - 6;
} else {
resStrName = "sweets" + i;
resViewName = "view" + i;
}
strId = res.getIdentifier(resStrName, "string", getPackageName());
viewId = res.getIdentifier(resViewName, "id", getPackageName());
UserInfo "userInfo" + i = new UserInfo(getString(strId), viewId)
resStrName = "userInfo" + i
userInfos.add(resStrName);
}
return userInfos;
모든 소스 코드
Reference
이 문제에 관하여(Main Activity의 기본 (Recycler view 편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hoonokonoko/items/bc107e758b286ba5690b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)