728x90
Android studio (안드로이드 스튜디오) RecyclerVIew , 클릭ClickListener, 화면전환(intent)
앱에서 대량의 데이터 세트 또는 자주 변경되는 데이터에 기반한 요소의 스크롤 목록을 표시해야 할때
주로 리사이클러뷰가 사용된다.
RecyclerView 는 ListView 보다 더 진보하고 유연해진 버전이다.
지원라이브러리 추가
dependencies {
implementation 'com.android.support:recyclerview-v7:28.0.0'
}
메니페스트에 추가
<activity android:name=".ItemActivity">
</activity>
<메인>
package com.example.recyclerview;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
public RecyclerView recyclerView;
ArrayList<Item> itemList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
// RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this); //상하
// RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this,
// LinearLayoutManager.HORIZONTAL,false); //좌우
// RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this, 3); //3개 상하 나오게
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this, 2,
LinearLayoutManager.HORIZONTAL,false); //2개 좌우 나오게
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(new MyAdapter(insertItem()));
}
ArrayList insertItem()
{
itemList = new ArrayList<>();
Item item1 = new Item(R.drawable.sa1, "이새롬");
Item item2 = new Item(R.drawable.ha2, "송하영");
Item item3 = new Item(R.drawable.n1 , "노지선");
Item item4 = new Item(R.drawable.park1, "박지원");
Item item5 = new Item(R.drawable.seo1, "이서연");
Item item6 = new Item(R.drawable.gyu1, "장규리");
Item item7 = new Item(R.drawable.na1, "이나경");
Item item8 = new Item(R.drawable.chang1, "이채영");
Item item9 = new Item(R.drawable.baek1, "백지헌");
itemList.add(item1);itemList.add(item2);itemList.add(item3);itemList.add(item4);itemList.add(item5);
itemList.add(item6);itemList.add(item7);itemList.add(item8);itemList.add(item9);
return itemList;
}
}
< Adapter>
class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{
private ArrayList<Item> itemList;
private Context context;
private Intent intent;
ImageView imageView;
public MyAdapter(ArrayList<Item> itemList) {
this.itemList = itemList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, final int position) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.item_view,parent,false);
return new ViewHolder(view);
}//아이템 뷰로 사용 될 xml inflate 시킴
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.imageView.setImageResource(itemList.get(position).getItem_image());
holder.textView.setText(itemList.get(position).getItem_title()); //viewHolder 객체
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent = new Intent(v.getContext(), ItemActivity.class);
intent.putExtra("number", position);
intent.putExtra("title",itemList.get(position).getItem_title());
v.getContext().startActivity(intent);
Toast.makeText(v.getContext(), "클릭 되었습니다.", Toast.LENGTH_SHORT).show();
}
});
}//뷰안에 필요한 정보 채움
@Override
public int getItemCount() {//data set 전체크기
return itemList.size();
}
//ViewHolder 클래스
class ViewHolder extends RecyclerView.ViewHolder{
public ImageView imageView;
public TextView textView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.item_image);
textView = itemView.findViewById(R.id.item_text); //파라메타 id 찾기
}
}
}
<ItemActivity> 클릭시 전환되는 화면
package com.example.recyclerview;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class ItemActivity extends AppCompatActivity {
private Intent intent;
private int number;
private String title;
private ImageView imageView;
private TextView textView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.item_detail); //전환된 xml
intent = getIntent();
number = intent.getIntExtra("number", -1);
title = intent.getStringExtra("title");
imageView = findViewById(R.id.item_detail_image);
textView = findViewById(R.id.item_detail_text);
//이새롬, 송하영, 노지선, 박지원, 이서연, 장규리, 이나경, 이채영, 백지헌
switch (number)
{
case 0://이새롬
imageView.setImageResource(R.drawable.sa2);
textView.setText(title);
textView.append("\n");
textView.append("출생 : 97년 1월 7일 \n");
textView.append("신체 : 163cm, 42kg B형\n");
textView.append("포지션 : 캡틴, 서브보컬, 리드댄서 \n");
break;
case 1://송하영
imageView.setImageResource(R.drawable.ha13);
textView.setText(title);
textView.append("\n");
textView.append("출생 : 97년 9월 29일 A형\n");
textView.append("신체 : 163cm, 46kg \n");
textView.append("포지션 : 리드보컬, 메인댄서 \n");
break;
case 2://노지선
imageView.setImageResource(R.drawable.n2);
textView.setText(title);
textView.append("\n");
textView.append("출생 : 98년 11월 23일 B형\n");
textView.append("신체 : 158cm, 43kg \n");
textView.append("포지션 : 센터, 서브보컬, 리드댄서 \n");
break;
case 3://박지원
imageView.setImageResource(R.drawable.park2);
textView.setText(title);
textView.append("\n");
textView.append("출생 : 98년 3월 2일 \n");
textView.append("신체 : 158cm, 45kg A형\n");
textView.append("포지션 : 메인보컬 \n");
break;
case 4://이서연
imageView.setImageResource(R.drawable.seo2);
textView.setText(title);
textView.append("\n");
textView.append("출생 : 00년생 1월 22일 \n");
textView.append("신체 : 158cm, 47kg A형\n");
textView.append("포지션 : 메인래퍼, 서브보컬 \n");
break;
case 5://장규리
imageView.setImageResource(R.drawable.gyu2);
textView.setText(title);
textView.append("\n");
textView.append("출생 : 97년 12월 27일 \n");
textView.append("신체 : 168cm, 51kg B형\n");
textView.append("포지션 : 리드보컬 \n");
break;
case 6://이나경
imageView.setImageResource(R.drawable.na2);
textView.setText(title);
textView.append("\n");
textView.append("출생 : 00년 6월 1일 \n");
textView.append("신체 : 159cm, 42kg A형\n");
textView.append("포지션 : 서브보컬, 리드보컬 \n");
break;
case 7://이채영
imageView.setImageResource(R.drawable.chang2);
textView.setText(title);
textView.append("\n");
textView.append("출생 : 00년 5월 14일 \n");
textView.append("신체 : 169cm, 48kg B형\n");
textView.append("포지션 : 리드래퍼, 서브보컬, 메인댄서 \n");
break;
case 8://백지헌
imageView.setImageResource(R.drawable.baek1);
textView.setText(title);
textView.append("\n");
textView.append("출생 : 03년 4월 17일 \n");
textView.append("신체 : 166cm, 41kg B형\n");
textView.append("포지션 : 서브보컬 \n");
break;
}
}
}
<아이템>
public class Item {
private int item_image;
private String item_title;
public Item(int item_image, String item_title) {
this.item_image = item_image;
this.item_title = item_title;
}
public String getItem_title() {
return item_title;
}
public int getItem_image() {
return item_image;
}
public void setItem_title(String item_title) {
this.item_title = item_title;
}
public void setItem_image(int item_image) {
this.item_image = item_image;
}
}
< 메인 xml >
<TextView
android:layout_width="match_parent"
android:layout_height="238dp"
android:background="@drawable/promis"
android:gravity="center_horizontal"
android:text="프로미스나인"
android:textSize="50dp"
android:textStyle="bold" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="409dp"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="1dp"
tools:layout_editor_absoluteY="1dp" />
<item_view xml>
<LinearLayout
android:id="@+id/item_layout"
android:layout_width="175dp"
android:layout_height="231dp"
android:orientation="vertical"
android:layout_marginTop="10dp"
android:layout_marginRight="20dp"
android:layout_gravity="center">
<ImageView
android:id="@+id/item_image"
android:layout_width="match_parent"
android:layout_height="136dp"
/>
<TextView
android:id="@+id/item_text"
android:layout_width="match_parent"
android:layout_height="92dp"
android:gravity="center"
android:text="문구"
android:textSize="30dp" />
</LinearLayout>
<item_detail xml>
<ImageView
android:id="@+id/item_detail_image"
android:layout_width="249dp"
android:layout_height="278dp"
android:layout_marginStart="80dp"
android:layout_marginTop="84dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/item_detail_text"
android:layout_width="257dp"
android:layout_height="177dp"
android:layout_marginStart="76dp"
android:layout_marginTop="76dp"
android:text="임시저장"
android:textSize="20dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/item_detail_image" />
댓글