728x90

RecyclerView 기본 개념을 자세히 다루지는 않는다.



    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
}


dependencies {
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'

    implementation 'gun0912.ted:tedpermission:2.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'  // 레이아웃으로 사용할 CardView
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
}

최신(2020.12월) 기준으로는 implementation 'androidx.recyclerview:recyclerview:1.1.0' 를 추가하면 된다.

아래 이미지의 import는 이전 자료 기준이라고 보면 된다.


Android Studio에서 RecyclerViewAdapter 를 쉽게 만드는 방법을 유투브 동영상을 보면서 알게되어 적어둔다.

Alt + Eneter 키를 눌러서 자동완성으로 만드는 방법이다.

RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.Holder> 처럼 파란색상으로 된 클래스명은 동일하게 적어준다.

가장 먼저 Holder 클래스를 추가하고 나서 Implement methods 를 추가추고 번호 순서대로 하면 쉽게 코드가 자동 완성된다.





이렇게 하고 나면

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;

class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.Holder> {
    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return 0;
    }

    public class Holder extends RecyclerView.ViewHolder {
        public Holder(View itemView) {
            super(itemView);
        }
    }
}
 


모습으로 코드가 만들어진다.

여기에 실제 추가할 코드를 반영하여 작성한다.

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;

class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.Holder> {
    Context mContext;
    private ArrayList<MessageData> mMessageData;

    public RecyclerViewAdapter(Context context, ArrayList<MessageData> arrayList) {
        mContext = context;
        mMessageData = arrayList;
    }

    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new Holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.rv_layout,parent,false));
    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, int position) {
        MessageData data = mMessageData.get(position);
        holder.heading.setText(data.getHeading());
        holder.message.setText(data.getMessage());
    }

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

    public class Holder extends RecyclerView.ViewHolder {
        TextView heading;
        TextView message;
        public Holder(View itemView) {
            super(itemView);
            heading = itemView.findViewById(R.id.heading);
            message = itemView.findViewById(R.id.messageBody);
        }
    }
}
 


Acitivy.java 에서 구현할 코드

RecyclerView 관련 코드만 적었다.

public class MainActivity extends AppCompatActivity {
    Context context;
    private RecyclerView mRecyclerView;
    private RecyclerViewAdapter mAdapter;
    private ArrayList<MessageData> mMessageData = new ArrayList<>();

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

        initView();
    }

    private void initView(){
        mRecyclerView = findViewById(R.id.messagelist);
        mAdapter = new RecyclerViewAdapter(this,mMessageData);
        LinearLayoutManager manager = new LinearLayoutManager(this);
        DividerItemDecoration decoration = new DividerItemDecoration(this, manager.getOrientation());

        mRecyclerView.addItemDecoration(decoration);
        mRecyclerView.setLayoutManager(manager);
        mRecyclerView.setAdapter(mAdapter);
    }
}
 



블로그 이미지

Link2Me

,