안드로이드 프로그래밍/[ Android Framework ]

[ Android ] 08. drawer를 이용해 Recycler View 구현하기

kim.svadoz 2020. 8. 12. 11:40
728x90
반응형

TabLayout & design

  • gradle(app) 라이브러리 다운로드
implementation 'com.android.support:design:28.0.0'
  • menu의 리소스화
package multi.android.material_design_pro.exam;

public class FragmentExam01 extends AppCompatActivity {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    ViewPager examPager;
    ExamPagerAdapter adapter = new ExamPagerAdapter(getSupportFragmentManager());
    ViewFragment1 viewFragment1;
    //ViewFragment2 viewFragment2;
    ListFragmentTest viewFragment2;
    ViewFragment3 viewFragment3;

    TabLayout tabExam;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_pager_exam);
        examPager = findViewById(R.id.examPager);
        setupViewPager(examPager);
        examPager.addOnPageChangeListener(new PageListener());
        tabExam = findViewById(R.id.tabExam);

        viewFragment1 = new ViewFragment1();
        viewFragment2 = new ListFragmentTest();
        viewFragment3 = new ViewFragment3();

        tabExam.setupWithViewPager(examPager);
    }

    public void setupViewPager(ViewPager viewPager){
        adapter.addFragment(new ViewFragment1(), "첫번째 뷰");
        adapter.addFragment(new ListFragmentTest(), "두번째 뷰");
        adapter.addFragment(new ViewFragment3(), "세번째 뷰");
        viewPager.setAdapter(adapter);
    }

    public void btn_click(View view){
        examPager.setCurrentItem(Integer.parseInt(view.getTag().toString()));
    }

    class ExamPagerAdapter extends FragmentPagerAdapter{

        public ExamPagerAdapter(FragmentManager supportFragmentManager) {
            super(supportFragmentManager);
        }

        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }

        public void addFragment(Fragment fragment, String title){
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @NonNull
        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

    }

    class PageListener implements ViewPager.OnPageChangeListener {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }
        @Override
        public void onPageSelected(int position) {
            //페이지가 변경되었을 때
            Toast.makeText(FragmentExam01.this, "페이지가 전환", Toast.LENGTH_SHORT).show();
        }
        @Override
        public void onPageScrollStateChanged(int state) {

        }
    }
}
 <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabExam"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMode="scrollable"/>

20-04-17 금

drawer

navigation view, recycler view,

image-20200417093205107

  • design 이용할 때는 프로젝트 새로만들었으니 library를 추가해주어야 한다.
  • circle_image_View
implementation 'de.hdodenhof:circleimageview:3.0.1'

Recycler View

- 실행과정

  1. Recycler에 출력할 데이터 준비

  2. Adapter생성

    => row하나에 대한 구성 레이아웃

    1. Recycler에 레이아웃을 설정

    => ex) LinearLayout, GirdLayout

  3. Recycler와 adapter를 연결

  4. 추가적인 요소들을 적용할 수 있다. - 꾸미기, 애니메이션

-SimpleRecyclerView

public class SimpleRecyclerTest extends AppCompatActivity {
    RecyclerView list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple_recycler_test);

        list = findViewById(R.id.list);
        //1. Recycler에 출력할 데이터 준비
        List<SimpleItem> recycler_simple_data = new ArrayList<>();
        for(int i=0; i<10; i++){
            SimpleItem item = new SimpleItem("simple_item"+i);
            recycler_simple_data.add(item);
        }
        //2. Adapter생성
        SimpleItemAdapter adaptaer = new SimpleItemAdapter(this,
                R.layout.simple_item, recycler_simple_data);
        //3. Recycler에 레이아웃을 설정 **
        //  => ex) LinearLayout, GirdLayout
        //  RecyclerView에 설정할 레이아웃 객체 설정

        // 1. LinearLayout 설정
        /*LinearLayoutManager manager = new LinearLayoutManager(getApplicationContext());
        manager.setOrientation(LinearLayoutManager.HORIZONTAL);*/

        // 2. GridLayout설정
        GridLayoutManager manager = new GridLayoutManager(getApplicationContext(), 2);
        list.setHasFixedSize(true);

        list.setLayoutManager((manager));// VERTICAL LinearLayout이 셋팅
        //4. Recycler와 adapter를 연결
        list.setAdapter(adaptaer);
        //5. 추가적인 요소들을 적용할 수 있다. - 꾸미기, 애니메이션
    }
//RecyclerView에서 사용하는 Adapter를 커스터마이징
//Adapter안에 ViewHolder 포함 - 정의(ListView사용할때와 동일한 역할)
//           -------------
//                  ^ㅡㅡㅡㅡㅡㅡ inner Class로 정의
public class SimpleItemAdapter
        extends RecyclerView.Adapter<SimpleItemAdapter.ViewHolder> {
    Context context;
    int row_res_id; // row를 구성하는 layout
    List<SimpleItem> data; //RecyclerView에 출력될 전체 데이터

    public SimpleItemAdapter(Context context, int row_res_id, List<SimpleItem> data) {
        this.context = context;
        this.row_res_id = row_res_id;
        this.data = data;
    }

    //xml로부터 뷰(한 row에 대한 뷰)를 만들어서 ViewHolder로 넘기는 작업
    //View를 구성하는 구성요소의 리소스를 가져오는 작업을 하는 객체
    //1. onCreateViewHolder에서 row에 대한 뷰를 inflate해서 생성
    //2. ViewHolder객체를 만들어서 1번에서 생성한 뷰를 넘긴다.
    //3. ViewHolder객체안에서 onCreateViewHolder메소드에서 리턴반은 객체에서 데이터를 연결할 뷰를 찾아온다.
    //4. onBindViewHolder메소드에서 ViewHolder가 갖고 있는 구성요소에 데이터를 연결하기
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(row_res_id, null);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Log.d("recycler","onBindViewHolder:"+position);
        //ViewHolder가 찾아놓은 TextView를 꺼내고
        TextView row_txt_view = holder.txtview;
        //꺼낸 TextView에 데이터 연결
        row_txt_view.setText(data.get(position).getData());
        //TextView에 클릭이벤트 연결
        row_txt_view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "데이터연결완료", Toast.LENGTH_LONG).show();
            }
        });
    }

    //RecyclerView에 출력할 데이터의 갯수 리턴
    @Override
    public int getItemCount() {
        return data.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        TextView txtview;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            txtview = itemView.findViewById(R.id.itemview);
        }
    }
728x90
반응형