간단한 뉴스 앱 만들기 #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]);
      }

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기