간단한 뉴스 앱 만들기 #2 - RecyclerView
Android Developer에서 제공하는RecyclerView guide를 참고하면 Adapter가 필요하다 한다.
즉, RecyclerView에 Adpater라는 요소를 만들어 삽입해야 한다는 의미이다.
RecyclerView 예제를 가지고 테스트를 수행해보자.
-
MainActivity with RecyclerView
package com.example.newstest; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private RecyclerView.Adapter mAdapter; private RecyclerView.LayoutManager layoutManager; String[] myDataset; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_news); recyclerView = findViewById(R.id.my_recycler_view); // use this setting to improve performance if you know that changes // in content do not change the layout size of the RecyclerView recyclerView.setHasFixedSize(true); // use a linear layout manager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); // specify an adapter (see also next example) mAdapter = new MyAdapter(myDataset); recyclerView.setAdapter(mAdapter); } }
- RecyclerView가 생성된 곳의 주소를 지정해주고 그 객체에 현재 레이아웃 주소 세팅을 한다.
- mAdapter라는 객체를 myDataset이라는 내가 가진 데이터를 토대로 생성한다.
- 이 adapter를 recyclerview에 넣어준다.
- 데이터가 넘어간 adapter를 보자.
-
MyAdapter with Adapter
package com.example.newstest; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import androidx.recyclerview.widget.RecyclerView;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private String[] mDataset;
// Provide a reference to the views for each data item
// Complex data items may need more than one view per item, and
// you provide access to all the views for a data item in a view holder
public static class MyViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public TextView textView;
public MyViewHolder(View view) {
super(view);
textView = (TextView) view.findViewById(R.id.textView);
}
}
// Provide a suitable constructor (depends on the kind of dataset)
public MyAdapter(String[] myDataset) {
mDataset = myDataset;
}
// Create new views (invoked by the layout manager)
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View v = (View) LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_news, parent, false);
MyViewHolder vh = new MyViewHolder(v);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.length;
}
}
```
- 데이터를 받아와 mDataset에 저장하고 cardview가 저장된 레이아웃의 뷰를 지정해준다.
- 그리고 onBindViewHolder에서 데이터를 지정해주는데, 위에서는 아무 작업을 수행하지 않았다.
- MainActivity에서 데이터를 넘겨주고, 해당 데이터를 String으로 CardView의 Content에 띄워보자.
//MainActivity String[] myDataset = {"Test", "ing"};
//MyAdapter @Override public void onBindViewHolder(MyViewHolder holder, int position) { // - get element from your dataset at this position // - replace the contents of the view with that element holder.textView.setText(mDataset[position]); }
'Android > 간단한 뉴스 앱 만들기(기초)' 카테고리의 다른 글
간단한 뉴스 앱 만들기 #5 - 인터넷 브라우저로 열기 (0) | 2021.01.20 |
---|---|
간단한 뉴스 앱 만들기 #4 - 화면 전환 (0) | 2021.01.20 |
간단한 뉴스 앱 만들기 #3 - newsapi로 데이터 받아오기 (0) | 2021.01.17 |
간단한 뉴스 앱 만들기 #1 - UI 생성 (0) | 2021.01.17 |
최근댓글