Recycler view를 사용하기 위해서 먼저 인터페이스를 구현 해주어야한다.
implementation 'androidx.recyclerview:recyclerview:1.1.0'
그 다음, acticity_amin.xml에 Recyclerview를 넣어주고,
<?xml version="1.0" encoding="utf-8" ?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
재활용을 할 xml를 구현해준다.
RelativeLayout을 사용하면 좀 더 유용하게 재활용 할 수 있다.
<?xml version="1.0" encoding="utf-8" ?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<androidx.cardview.widget.CardView
android:id="@+id/cardview"
android:layout_width="match_parent"
android:layout_margin="@dimen/cardview_compat_inset_shadow"
android:layout_height="wrap_content" >
<LinearLayout
android:paddingTop="5dp"
android:paddingLeft="5dp"
android:paddingBottom="5dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:text="Title"
android:textStyle="bold"
android:textSize="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/description"
android:text="description"
android:textSize="17dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/fight"
android:text="fight"
android:textSize="17dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</RelativeLayout>
생성자(Contructor)를 구현하여, 구조를 잡아주고, getter과 setter를(가져오고, 저장)만들어 준다.
package Model;
public class ListItem {
private String name;
private String description;
private String fight;
public ListItem (String text, String description, String fight) {
this .name = text;
this .description = description;
this .fight = fight;
}
public String getFight () {
return fight;
}
public void setFight (String fight) {
this .fight = fight;
}
public String getText () {
return name;
}
public void setText (String text) {
this .name = text;
}
public String getDescription () {
return description;
}
public void setDescription (String description) {
this .description = description;
}
}
반복적인 컬럼을 사용, 관리를 용이하게 하기위해 adapter를 만들어주어야한다.
package Adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
import Model.ListItem;
import tipcalculator.gohool.recyclerview5.R;
public class MainAdapter extends RecyclerView .Adapter <MainAdapter .MyViewHolder > {
private Context context;
private List<ListItem> listItems;
public MainAdapter (Context context, List listItems) {
this .context = context;
this .listItems = listItems;
}
@NonNull
@Override
public MainAdapter.MyViewHolder onCreateViewHolder (@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_row, parent,false );
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder (@NonNull MainAdapter.MyViewHolder holder, int position) {
ListItem item = listItems.get(position);
holder.name.setText(item.getText());
holder.description.setText(item.getDescription());
holder.fight.setText(item.getFight());
}
@Override
public int getItemCount () {
return listItems.size();
}
public class MyViewHolder extends RecyclerView .ViewHolder implements View .OnClickListener {
public TextView name;
public TextView description;
public TextView fight;
public MyViewHolder (@NonNull View itemView) {
super (itemView);
itemView.setOnClickListener(this );
name = (TextView) itemView.findViewById(R.id.title);
description = (TextView) itemView.findViewById(R.id.description);
fight = (TextView) itemView.findViewById(R.id.fight);
}
@Override
public void onClick (View v) {
int position = getAdapterPosition();
ListItem touched = listItems.get(position);
Toast.makeText(context, touched.getText(), Toast.LENGTH_LONG).show();
}
}
}
//MainActivity.java
package tipcalculator.gohool.recyclerview5;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
import Adapter.MainAdapter;
import Model.ListItem;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private List<ListItem> listItems;
@Override
protected void onCreate (Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(true );
recyclerView.setLayoutManager(new LinearLayoutManager(this ));
listItems = new ArrayList<>();
ListItem item1 = new ListItem("hello there" , "noone" , "bye" );
ListItem item2 = new ListItem("noone here" , " then die" , "ok" );
listItems.add(item1);
listItems.add(item2);
adapter = new MainAdapter(this ,listItems);
recyclerView.setAdapter(adapter);
}
}
최대한 이해가 가기 쉽게 써놓았다. 물론 나한테만 쉬울 수도 있다.. 이해만.
+++++
각 포지션(위치)를 인자를 받아 터치를 한다면, 다른 화면으로 들어가는 기능을 추가 해보았다.
public class MyViewHolder extends RecyclerView .ViewHolder implements View .OnClickListener {
public TextView name;
public TextView description;
public TextView fight;
public MyViewHolder (@NonNull View itemView) {
super (itemView);
itemView.setOnClickListener(this );
name = (TextView) itemView.findViewById(R.id.title);
description = (TextView) itemView.findViewById(R.id.description);
fight = (TextView) itemView.findViewById(R.id.fight);
}
@Override
public void onClick (View v) {
int position = getAdapterPosition();
ListItem touched = listItems.get(position);
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("name" , "name : " + touched.getText() );
intent.putExtra("description" ,"description : " + touched.getDescription());
intent.putExtra("fighting" ,"fighting? : " + touched.getFight());
context.startActivity(intent);
}
DetailActicity 하는 컴포넌트를 만들어주었다.
package tipcalculator.gohool.recyclerview5;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class DetailActivity extends AppCompatActivity {
TextView name, description, fight;
Bundle extras;
@Override
protected void onCreate (Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
name = (TextView) findViewById(R.id.dtexdt1);
description = (TextView) findViewById(R.id.dtext2);
fight = (TextView) findViewById(R.id.dtext3);
extras = getIntent().getExtras();
name.setText(extras.getString("name" ));
description.setText(extras.getString("description" ));
fight.setText(extras.getString("fighting" ));
}
}
-여기저기 둘러보다가 context의 의미를 한발자국 더 가까워 질 수 있게 만든 어떤 블러거의 Context의 의미-
매개변수로 Context클래스를 요구하는 것들을 볼수있습니다. Context란 문맥이라는 뜻인데 쉽게 생각해서 안드로이드의 한 화면 단위 클래스가 Activity인데 이 Activity에서 중요한 부분을 가지고 있는 클래스라고 생각하면 됩니다. Context context -> Activity이름.this 와 같다고 생각하시고 작업하셔도 무리가없을것입니다. 출처 : 여기