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); } } |