RecyclerView with GridLayoutManager를 사용한 간단한 Android 그리드 예제(이전의 GridView와 동일)
나는 그것을 알고 있습니다.RecyclerView
이전 제품의 기능을 대체했습니다.ListView
그리고.GridView
다음을 사용하여 최소한의 그리드 설정을 보여주는 매우 기본적인 예를 찾고 있습니다.RecyclerView
저는 긴 튜토리얼 스타일의 설명을 찾고 있는 것이 아니라 최소한의 예일 뿐입니다.이전의 GridView를 모방한 가장 단순한 그리드는 다음과 같은 기능으로 구성될 것입니다.
- 행당 여러 셀
- 각 셀의 단일 보기
- 클릭 이벤트에 응답합니다.
단답형
목록을 작성하기 위해 을 설정하는 데 이미 익숙한 사용자에게 좋은 소식은 그리드를 만드는 것이 대부분 같다는 것입니다.당신은 그냥 사용합니다.GridLayoutManager
대신에LinearLayoutManager
설정할 때RecyclerView
업.
recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
이보다 더 많은 도움이 필요한 경우 다음 예제를 확인하십시오.
전체 예
다음은 아래 이미지와 같은 최소한의 예입니다.
빈 활동으로 시작합니다.다음 작업을 수행하여 다음을 추가합니다.RecyclerView
각 섹션에 코드를 복사하여 붙여넣기만 하면 됩니다.나중에 필요에 맞게 사용자 정의할 수 있습니다.
- 그라들에 종속성 추가
- 활동 및 그리드 셀에 대한 xml 레이아웃 파일 추가
- RecyclerView 어댑터 만들기
- 활동에서 RecyclerView 초기화
Gradle 종속성 업데이트
앱에 다음 종속성이 있는지 확인합니다.gradle.build
파일:
compile 'com.android.support:appcompat-v7:27.1.1'
compile 'com.android.support:recyclerview-v7:27.1.1'
최신 버전으로 버전 번호를 업데이트할 수 있습니다.
활동 레이아웃 만들기
추가합니다.RecyclerView
xml 레이아웃으로 이동합니다.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rvNumbers"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
그리드 셀 레이아웃 작성
우리의 각 셀은RecyclerView
그리드는 단일만 가질 것입니다.TextView
새 레이아웃 리소스 파일을 만듭니다.
recyclerview_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:padding="5dp"
android:layout_width="50dp"
android:layout_height="50dp">
<TextView
android:id="@+id/info_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="@color/colorAccent"/>
</LinearLayout>
어댑터 생성
그RecyclerView
에서는 각 셀의 보기를 데이터로 채울 어댑터가 필요합니다.새 Java 파일을 만듭니다.
MyRecyclerViewAdapter.java
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {
private String[] mData;
private LayoutInflater mInflater;
private ItemClickListener mClickListener;
// data is passed into the constructor
MyRecyclerViewAdapter(Context context, String[] data) {
this.mInflater = LayoutInflater.from(context);
this.mData = data;
}
// inflates the cell layout from xml when needed
@Override
@NonNull
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.recyclerview_item, parent, false);
return new ViewHolder(view);
}
// binds the data to the TextView in each cell
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.myTextView.setText(mData[position]);
}
// total number of cells
@Override
public int getItemCount() {
return mData.length;
}
// stores and recycles views as they are scrolled off screen
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView myTextView;
ViewHolder(View itemView) {
super(itemView);
myTextView = itemView.findViewById(R.id.info_text);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
}
}
// convenience method for getting data at click position
String getItem(int id) {
return mData[id];
}
// allows clicks events to be caught
void setClickListener(ItemClickListener itemClickListener) {
this.mClickListener = itemClickListener;
}
// parent activity will implement this method to respond to click events
public interface ItemClickListener {
void onItemClick(View view, int position);
}
}
메모들
- 꼭 필요한 것은 아니지만 셀에서 클릭 이벤트를 청취하는 기능을 포함했습니다.이것은 예전에 사용할 수 있었습니다.
GridView
공통적으로 필요한 것입니다.이 코드가 필요하지 않으면 제거할 수 있습니다.
활동에서 RecyclerView 초기화
다음 코드를 기본 활동에 추가합니다.
기본 활동.java
public class MainActivity extends AppCompatActivity implements MyRecyclerViewAdapter.ItemClickListener {
MyRecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// data to populate the RecyclerView with
String[] data = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48"};
// set up the RecyclerView
RecyclerView recyclerView = findViewById(R.id.rvNumbers);
int numberOfColumns = 6;
recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
adapter = new MyRecyclerViewAdapter(this, data);
adapter.setClickListener(this);
recyclerView.setAdapter(adapter);
}
@Override
public void onItemClick(View view, int position) {
Log.i("TAG", "You clicked number " + adapter.getItem(position) + ", which is at cell position " + position);
}
}
메모들
- 활동은 다음을 구현합니다.
ItemClickListener
어댑터에 정의한 것과 같습니다.셀를 이를통다셀클이수있다습니처리할를벤트릭해음서에▁cell▁in▁click에서 처리할 수 .onItemClick
.
끝났습니다
바로 그겁니다.이제 프로젝트를 실행하여 맨 위에 있는 이미지와 유사한 것을 얻을 수 있어야 합니다.
계속
둥근 모서리
열 자동 맞춤
추가 연구
- Android RecyclerView with GridView GridLayoutManager 예제 자습서
- Android Recycler 그리드 레이아웃 보기 예제
- Android에서 예를 들어 RecyclerView 알아보기
- RecyclerView: 머리글이 있는 그리드
- 재료 설계에서 재활용기 뷰를 사용하는 Android 그리드 레이아웃 관리자
- Android에서 RecyclerView 및 CardView 시작하기
이것은 XML만의 간단한 방법입니다.
span열 수에 대한 개수
layoutGrid 또는 linear(수직 또는 수평)로 만들기 위한 관리자
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/personListRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="2" />
Suragch의 답변이 마음에 들고 감사하지만, 어댑터를 코딩하는 것을 발견했기 때문에 메모를 남기고 싶습니다.MyRecyclerViewAdapter
합니다.onItemClick
클래스 캡슐화를 올바르게 사용하지 않기 때문에 이 작업을 수행하는 가장 좋은 방법은 아닙니다.따라서 제 제안은 어댑터가 수신 작업만을 처리하도록 하고(이것이 그의 목적입니다!) 어댑터를 사용하는 활동에서 수신 작업을 분리하는 것입니다.MainActivity
MyRecyclerViewAdapter.java
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {
private String[] mData = new String[0];
private LayoutInflater mInflater;
// Data is passed into the constructor
public MyRecyclerViewAdapter(Context context, String[] data) {
this.mInflater = LayoutInflater.from(context);
this.mData = data;
}
// Inflates the cell layout from xml when needed
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.recyclerview_item, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
// Binds the data to the textview in each cell
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String animal = mData[position];
holder.myTextView.setText(animal);
}
// Total number of cells
@Override
public int getItemCount() {
return mData.length;
}
// Stores and recycles views as they are scrolled off screen
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView myTextView;
public ViewHolder(View itemView) {
super(itemView);
myTextView = (TextView) itemView.findViewById(R.id.info_text);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
onItemClick(view, getAdapterPosition());
}
}
// Convenience method for getting data at click position
public String getItem(int id) {
return mData[id];
}
// Method that executes your code for the action received
public void onItemClick(View view, int position) {
Log.i("TAG", "You clicked number " + getItem(position).toString() + ", which is at cell position " + position);
}
}
에 하시기 바랍니다.onItemClick
은 이정의방법에 MyRecyclerViewAdapter
수신된 이벤트/액션에 대해 작업을 코딩할 위치입니다.
이 전환을 완료하기 위해 수행해야 할 작은 변경 사항은 활동이 구현할 필요가 없다는 것입니다.MyRecyclerViewAdapter.ItemClickListener
이제는 어댑터에 의해 완전히 수행되기 때문입니다.그러면 이것이 최종 수정이 될 것은 다음과 같습니다.
기본 활동.java
public class MainActivity extends AppCompatActivity {
MyRecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// data to populate the RecyclerView with
String[] data = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48"};
// set up the RecyclerView
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rvNumbers);
int numberOfColumns = 6;
recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
adapter = new MyRecyclerViewAdapter(this, data);
adapter.setClickListener(this);
recyclerView.setAdapter(adapter);
}
}
은 당신의 해야 합니다.RecyclerView
LayoutManager
그리드 레이아웃 모드로 전환합니다.설정할 때 코드를 변경하기만 하면 됩니다.RecyclerView
LayoutManager
:
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), numberOfColumns));
There are 2 ways to achieve this
- In Xml
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_amenities"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_8sdp"
android:nestedScrollingEnabled="false"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="2"
app:layout_constraintEnd_toEndOf="@+id/text_parking_lot_amenities" app:layout_constraintStart_toStartOf="@+id/text_parking_lot_amenities" app:layout_constraintTop_toBottomOf="@id/text_parking_lot_amenities" />
에 됩니다.
중
listAmenities.layoutManager = GridLayoutManager(this, TWO)
here TWO indicates number of grid columns
에서 설정RecyclerView
설정
recyclerView.setLayoutManager(new GridLayoutManager(this, 4));
xml 파일의 recyclerview에서 그리드 레이아웃을 설정하려면 이 두 가지를 recyclerview xml에 넣으면 됩니다.
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount=numberOfItemsInSignleRow
자바 코드에서 그리드 레이아웃을 설정하고 싶다면 이것을 작성할 수 있습니다.
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), numberOfItemsInSignleRow));
재활용자 보기를 할당한 기본 활동에서 이 코드를 사용하십시오.
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
//recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
언급URL : https://stackoverflow.com/questions/40587168/simple-android-grid-example-using-recyclerview-with-gridlayoutmanager-like-the
'programing' 카테고리의 다른 글
jQuery: 클래스 및 입력 유형별 선택 (0) | 2023.08.23 |
---|---|
URL이 더 이상 작동하지 않도록 요청하는 Ajax 명령 (0) | 2023.08.23 |
mariadb 통신 패킷을 읽는 중 오류 발생 (0) | 2023.08.23 |
ReferenceError: Firefox에서 이벤트가 정의되지 않았습니다. (0) | 2023.08.23 |
서브모듈 내부의 Git 서브모듈(내포 서브모듈) (0) | 2023.08.23 |