Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- multiseekbar
- 지오코더
- databinding error
- 안드로이드
- 터치순서
- isFinishing()
- dispatchTouchEvent
- 안드로이드 다이얼로그 오류
- 힐트
- Python
- [databinding]
- android compose
- Could not find method
- 터치이벤트 순서
- onIntercepterTouchEvent
- 원이동
- Android
- WindowManager$BadTokenException
- 원생성
- {"msg":"cannot find method
- rangeslider
- Java
- 듀얼시크바
- dualthumbseekbar
- android.view.WindowManager.BadTokenException
- databinding xml
- @provides @binds 차이
- 레트로핏
- 도형생성
- material3
Archives
- Today
- Total
개발관련일지
AND ] 리사이클러뷰 코드정리 - 자바 본문
사용했던 간단한 리사이클러뷰 코드 정리
bulid.grade >> dependencies에 implementation 'androidx.recyclerview:recyclerview:1.1.0' 추가하기
리사이클러뷰를 보여줄 메인엑티비티 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"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recipeRecyclerView"
android:layout_width="match_parent"
android:layout_height="150dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button android:id="@+id/makingBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="생성하기"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.894"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recipeRecyclerView"
app:layout_constraintVertical_bias="0.061" />
</androidx.constraintlayout.widget.ConstraintLayout>
리사이클러뷰에 사용될 ArrayList에 담길 Data.class를 만들어서 list의 내용물을 getter setter로 이용한다.
public class Data {
String content;
String subject;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
}
리사이클러뷰에 연결 할 어뎁터를 생성한다.
public class MainAdapter extends RecyclerView.Adapter<MainAdapter.CustomViewHolder>{
private ArrayList<Data> recyclerList;
public MainAdapter(ArrayList<Data> recipeList) {
this.recyclerList = recipeList;
}
@NonNull
@Override
public MainAdapter.CustomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from((parent.getContext())).inflate(R.layout.recycler_item,parent,false);
// 리사이클러뷰의 아이템을 recycler_item로 불러준다.
CustomViewHolder holder = new CustomViewHolder(view);
//뷰 홀더에 아이템에 사용될 뷰를 붙여준다.
return holder;
}
@Override
public void onBindViewHolder(@NonNull final MainAdapter.CustomViewHolder holder, int position) {
// getter를 이용해서 리사이클러뷰 아이템넘버(포지션) = 어레이리스트 인덱스의 데이터를 맞춤
holder.itemSubject.setText(recyclerList.get(position).getContent());
holder.itemContent.setText(recyclerList.get(position).getSubject());
holder.itemView.setTag(position);
}
@Override
public int getItemCount() {
return (null!= recyclerList ? recyclerList.size() : 0);
}
public class CustomViewHolder extends RecyclerView.ViewHolder {
private TextView itemSubject;
private TextView itemContent;
public CustomViewHolder(@NonNull View itemView) {
super(itemView);
//홀더가 동작할때 사용 될 뷰 정의
itemSubject = (TextView) itemView.findViewById(R.id.itemSubject);
itemContent = (TextView) itemView.findViewById(R.id.itemContent);
}
}
}
메인엑티비티 코드
public class MainActivity extends AppCompatActivity {
//리사이클러뷰 코드 기록하기 위해서 만든 프로젝트
Button makingBtn;
RecyclerView recyclerView;
MainAdapter recipeAdapter;
ArrayList<Data> recyclerList;
private final int READ_LIST = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recipeRecyclerView); //리사이클러뷰 선언
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager); //리사이클러뷰가 리니어로 만든다 선언 다른 레이아웃을 사용하고싶으면 여기서 바꿔주면됨
recyclerList = new ArrayList<>(); //리사이클러뷰에 데이터를 담을 리스트 선언
recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), 1)); //리사이클러뷰에 경계선을 나타내줌 없어도됨
recipeAdapter = new MainAdapter(recyclerList); //어뎁터 선언
recyclerView.setAdapter(recipeAdapter); //어뎁터와 리사이클러뷰 연결
makingBtn = (Button) findViewById(R.id.makingBtn);
//리사이클러뷰를 생성할 엑티비티를 따로 분리해서 사용했음 MakingActivity.class에서 스타트퍼리져트를 통해서 데이터를 입력받아 동적으로 생성하도록함
makingBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,MakingActivity.class);
startActivityForResult(intent,READ_LIST);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
//이전 엑티비티에서 보낸 데이터 받기
//FIXME 자주실수하는거 = 코드 긁다가 그냥 인텐트는 받을떄 intent.getString 인데 스타트퍼리저트는 data.getString이니까 항상 확인하기
String subject = data.getStringExtra("subject");
String content = data.getStringExtra("content");
Data getData = new Data(subject, content); //데이터 클래스에 받은 데이터를 담고
recyclerList.add(getData); //데이터클래스를 리사이클러뷰용 어레이리스트에 푸쉬함
recipeAdapter.notifyDataSetChanged(); //어뎁터에게 데이터가 변경되었다고 알려줌 이거말고 메소드 하나 더있는데 기억안남 이걸로도 작동함
}
}
}
생성버튼을 누르면 MakingActivity로 이동해서 데이터를 입력받고 다시 이전 엑티비티로 돌아가서 리사이클러뷰를 생성하도록 함
MakingActivity의 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:orientation="vertical"
android:layout_marginTop="200dp"
tools:context=".MakingActivity">
<EditText
android:id="@+id/subjectTxt"
android:layout_marginTop="500dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:hint="제목을 입력해주세요"
/>
<EditText
android:id="@+id/contentTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:hint="내용을 입력해주세요"
/>
<Button
android:id="@+id/submitBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="생성하기"
/>
</LinearLayout>
java 파일
public class MakingActivity extends AppCompatActivity {
Button submitBtn;
EditText subjectTxt , contentTxt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_making);
subjectTxt = (EditText) findViewById(R.id.subjectTxt);
contentTxt = (EditText) findViewById(R.id.contentTxt);
submitBtn = (Button) findViewById(R.id.submitBtn);
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("subject", subjectTxt.getText().toString());
intent.putExtra("content", contentTxt.getText().toString());
setResult(RESULT_OK, intent);
finish();
}
});
}
}
생성 한 후 모습
'개발기록 > 안드로이드' 카테고리의 다른 글
안드로이드 java] dual/multi thumbs seekbar -> RangeSlider를 이용해 만들기 (0) | 2021.01.03 |
---|---|
AND ] 안드로이드 레트로핏 사용하기 (0) | 2020.05.27 |
AND ] 레트로핏 사용하기전 찾아본것들 (0) | 2020.05.25 |
AND ] 쉐어드프리퍼런스 (0) | 2020.04.19 |
AND ] 리사이클러뷰 코드정리 아이템클릭 - 자바 (0) | 2020.04.19 |