본문 바로가기
Front-end/Android (안드로이드 앱 개발)

Android studio (안드로이드 스튜디오) RecyclerVIew , 클릭, 화면전환 - 응용편

by javapp 자바앱 2020. 3. 10.
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" />

 

 

댓글