UI 업무전 연습 - 리사이클러뷰어댑터

Jang Seok Woo·2021년 6월 22일
1

실무

목록 보기
1/136
post-thumbnail

리사이클러뷰 어댑터를 만들어보고

추후 업무하게될 UI만들기에 도움이 되고자 한다.

일반적으로 어플을 만들시 Linear Layout에 RecyclerView를 연동한 뷰를 많이 사용한다.

한정된 핸드폰 스크린 화면에, 많은 정보를 담아내기에 적절한 뷰이기 때문인것으로 보인다.

간단하게 메모장 어플리케이션을 만들어 RecyclerViewAdapter를 연동해 보았다.

우선 스플래시화면을 대충 만들어보고,

SplashActivity.java

package com.example.memo_java;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

import com.example.memo_java.main.MainActivity;

public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(intent);
                finish();
            }
        },1500);

    }

    @Override
    protected void onPause() {
        super.onPause();
        finish();
    }

}

예전에 만들어본 대로 Handler를 이용해 1.5초간 딜레이 후 화면이 메인액티비티로 넘어가도록 만들었다.

다음은 넘어가면 메인액티비티이다.

MainActivity.java

package com.example.memo_java.main;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import com.example.memo_java.R;
import com.example.memo_java.main.memo.Memo;
import com.example.memo_java.main.util.RecyclerViewAdapter;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    RecyclerView mrecyclerView;
    ArrayList<Memo> mmemoList = new ArrayList<>();
    RecyclerView.Adapter mrecyclerViewAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        String dummy_title = "Dummy_Title";
        String dummy_contents = "Dummy_Contents";

        Memo test = new Memo(dummy_title, dummy_contents);

        for(int i=0; i<20 ;i++){
            mmemoList.add(test);
        }

        mrecyclerView = findViewById(R.id.main_rv);
        mrecyclerView.setHasFixedSize(true);
        //리싸이클러뷰 레이아웃매니저
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);

        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mrecyclerView.setLayoutManager(layoutManager);
        //어댑터 연결
        mrecyclerViewAdapter = new RecyclerViewAdapter(mmemoList, this);
        mrecyclerView.setAdapter(mrecyclerViewAdapter);

    }

}

메인액티비티로 넘어와 리사이클러뷰에 더미값을 넣어두고 어댑터와 연결하여 정상적으로 시뮬레이터에서 돌아가는지 확인하는것이 목표이다.
다음은 메인과 스플레시 화면의 레이아웃(xml)이다.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:background="#FFE4B5"
    tools:context=".main.MainActivity">

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/main_rv"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>



</LinearLayout>

activity_splash.xml

<?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"
    android:background="@drawable/memo_splash"
    tools:context=".SplashActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:text="Splash Activity!!"/>

</androidx.constraintlayout.widget.ConstraintLayout>

memo_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_memo_item"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:layout_gravity="center_horizontal"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_memo_item_title"
        android:text="title"
        android:textSize="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/tv_memo_item_contents"
        android:text="contents"
        android:textSize="15dp"
        android:ellipsize="end"
        android:maxLines="5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

이후 해당 레이아웃 리소스파일과 메인액티비티를 연결할 adapter를 만들어 보도록 한다.

RecyclerViewAdapter.java

package com.example.memo_java.main.util;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.memo_java.R;
import com.example.memo_java.main.MainActivity;
import com.example.memo_java.main.memo.Memo;

import java.util.ArrayList;

public class RecyclerViewAdapter extends RecyclerView.Adapter<Holder> {

    Context mContext;
    ArrayList<Memo> mmemoList;

    public RecyclerViewAdapter(ArrayList memoList, Context context) {

        mmemoList = memoList;
        mContext = context;

    }

    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        Context context = parent.getContext();
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.memo_item,parent,false);
        return new Holder(view);

    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, int position) {
        holder.setItem(mmemoList.get(position));
    }

    @Override
    public int getItemCount() {
        return mmemoList.size();
    }

}

class Holder extends RecyclerView.ViewHolder {
    TextView title;
    TextView contents;

    public Holder(@NonNull View itemView){
        super(itemView);
        title=itemView.findViewById(R.id.tv_memo_item_title);
        contents=itemView.findViewById(R.id.tv_memo_item_contents);
    }

    public void setItem(Memo memo){
        title.setText(memo.getTitle());
        contents.setText(memo.getContents());
    }

}

어댑터를 위와 같이 연결한다.

우선 오늘은 여기까지

profile
https://github.com/jsw4215

0개의 댓글