티스토리 뷰

기존 베이스 코드는 https://4whomtbts.tistory.com/49 참조하세요.


의도



본인에게는, RecyclerView 에서의 Contents 를 정의해주는 GameTypeAdapter class 가 있다.

customs/GameTypeAdapter

package com.example.admin.myapplication.customs;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.admin.myapplication.R;

import java.util.ArrayList;

public class GameTypeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public static class GameTypeViewHolder extends RecyclerView.ViewHolder implements {
ImageView ivPicture;
TextView gameTitle;


public GameTypeViewHolder(View view) {
super(view);
gameTitle = view.findViewById(R.id.game_title);
}

}
private ArrayList<GameTypes> gameTypesList;
public GameTypeAdapter(ArrayList<GameTypes> gameTypesList) {
this.gameTypesList = gameTypesList;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.game_type_recycler_row,parent,false);


return new GameTypeViewHolder(v);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position){
GameTypeViewHolder gvholder = (GameTypeViewHolder)holder;

gvholder.gameTitle.setText(gameTypesList.get(position).gameTitle);
}
@Override
public int getItemCount() {
return gameTypesList.size();
}
}

이 코드를 간략하게 이해하고 넘어가자.

우리의 RecyclerView 는 결정적으로 Fragment_Fourth 에서 그려지는 것이다. 


fragmentClasses/Fragement_Fourth.java


public class Fragment_Fourth extends Fragment {



public Fragment_Fourth(){

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
RecyclerView mRecyclerView;
RecyclerView.LayoutManager mLayoutManager;

View view = inflater.inflate(R.layout.fragment_fourth,container,false);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recylcer_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mLayoutManager);

ArrayList<GameTypes> GameTypesArrayList = new ArrayList<>();

GameTypesArrayList.add(new GameTypes("리그오브레전드"));
GameTypesArrayList.add(new GameTypes("배틀그라운드"));
GameTypesArrayList.add(new GameTypes("스타크래프트"));
GameTypesArrayList.add(new GameTypes("포트나이트"));

GameTypeAdapter myAdapter = new GameTypeAdapter(GameTypesArrayList);
mRecyclerView.setAdapter(myAdapter);




return view;
}

}


코드가 길고 읽기 싫어보이지만, 우리는 RecyclerView 에 초점을 두고 있기 때문에, 핵심 코드만 보겠습니다.

        RecyclerView mRecyclerView;
    GameTypeAdapter myAdapter = new GameTypeAdapter(GameTypesArrayList);
mRecyclerView.setAdapter(myAdapter);

Adapter 가 간단히 무엇인지 얘기해보면, RecyclerView 는 그것 자체로는 View 일 뿐이다. 

하지만, 우리는 그 View 를 우리가 의도하는 기능을 넣어서 사용하고싶기 때문에

Adapter 라는 것을 만들어서, 그곳에서 우리의 RecyclerView 에 무엇을 채워넣고

어떠한 기능을 갖게 만들것인지 정의하는 것이다.


이제 코드에 대한 개념적인 설명이 되었으니, Toast Message 를 RecyclerView의 item 이 클릭되었을 때 출력해보자


public class GameTypeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public static class GameTypeViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
ImageView ivPicture;
TextView gameTitle;


public GameTypeViewHolder(View view) {
super(view);
gameTitle = view.findViewById(R.id.game_title);
view.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(),"테스트",Toast.LENGTH_LONG).show();
}
}
private ArrayList<GameTypes> gameTypesList;
public GameTypeAdapter(ArrayList<GameTypes> gameTypesList) {
this.gameTypesList = gameTypesList;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.game_type_recycler_row,parent,false);


return new GameTypeViewHolder(v);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position){
GameTypeViewHolder gvholder = (GameTypeViewHolder)holder;

gvholder.gameTitle.setText(gameTypesList.get(position).gameTitle);
}
@Override
public int getItemCount() {
return gameTypesList.size();
}
}

○ implements 하기

    public static class GameTypeViewHolder extends RecyclerView.ViewHolder {

GameTypeViewHolder 는 각각의 아이템을 정의하는 nest class 입니다. 이 글의 시작에서 보았던 어플리케이션에서 해당 부분을 보면.

위에 각각 숫자 하나하나를 구현해주는 것입니다. 그리고 우리는 이것에 onClick 이라는 기능을 추가해주겠다! 하는겁니다.

○ onClick

        @Override
public void onClick(View view) {
Toast.makeText(view.getContext(),"테스트",Toast.LENGTH_LONG).show();
}

위 코드는 매우 직관적입니다. 단순히 Toast 를 보여주는거니깐요.



이렇게 간단하게 RecyclerView 의 item 에 onClickListener 를 붙여보았습니다. 

끝!

댓글