ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [안드로이드] Fragment 프래그먼트 예제
    Android/공부 2020. 6. 26. 16:32
    프래그먼트를 활용해서 좌우로 화면이 넘어가는 어플 만들어보기

     

     

     

    1. xml

    1. activity_main.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"
        tools:context=".MainActivity"
        android:orientation="vertical">
    
        <com.google.android.material.tabs.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/tab"
            app:tabSelectedTextColor="#0000ff"
            app:tabTextColor="#AAAAAA"/>
    
        <androidx.viewpager.widget.ViewPager
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/pager"/>
    
    </LinearLayout>

     

    • 레이아웃 리소스에 TabLayout과 ViewPager 두 가지를 추가한다.

    • TabLayout에는 프래그먼트의 제목을 지정해 줄 수 있고, ViewPager는 각 프래그먼트를 보여주는 역할을 한다.

    • TabLayout의 tabselectedTextColor는 현재 선택되어있는 탭의 글씨 색을 설정하고, tabTextColor는 선택되어있지 않은 탭들의 글씨 색을 설정한다.

     


     

    2. 라이브러리 추가

     

    ▼ design 라이브러리 추가

     


     

    • 안드로이드에서 design 라이브러리를 추가해주고, bulid.gradle (module:app) 파일을 열어 'com.adnroid.support:design:26.0.0' 이 추가되었는지 확인한다.

     

     


    3. java
    • 자바 소스는 각 프래그먼트들과 페이지 어댑터, 메인클래스로 구성된다.

     

    1. MainActivity.java

    package com.example.myslideex;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.viewpager.widget.ViewPager;
    
    import android.os.Bundle;
    import android.widget.Toast;
    
    import com.example.myslideex.dummy.DummyContent;
    import com.google.android.material.tabs.TabLayout;
    
    public class MainActivity extends AppCompatActivity implements ItemFragment.OnListFragmentInteractionListener {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ViewPager viewPager = findViewById(R.id.pager);
            MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
            viewPager.setAdapter(adapter);
    
            TabLayout tabLayout = findViewById(R.id.tab);
            tabLayout.setupWithViewPager(viewPager);
        }
    
        @Override
        public void onListFragmentInteraction(DummyContent.DummyItem item) {
            Toast.makeText(getApplicationContext(), item.toString(), Toast.LENGTH_SHORT).show();
        }
    }
    • 메인 액티비티에서 레이아웃에 만들었던 뷰페이저와 페이저 어댑터를 연결시켜주고, 탭 레이아웃과 뷰 페이저를 연결시켜준다. 또, 메인 액티비티는 ItemFragment 클래스를 상속받는다. 처음 ItemFragment를 implements 시키면 빨간 줄이 그이면서 오류가 발생하는데, 이 부분에서 alt+enter를 눌러 필요한 코드를 오버 라이딩시켜주면 된다.

    • onListFragmentInteraction()은 아이템 리스트를 클릭했을 때 발생하는 이벤트를 지정해주는 역할을 한다. 

       

    2. MyPagerAdapter.java

    package com.example.myslideex;
    
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.fragment.app.Fragment;
    import androidx.fragment.app.FragmentManager;
    import androidx.fragment.app.FragmentPagerAdapter;
    
    import java.util.ArrayList;
    
    public class MyPagerAdapter extends FragmentPagerAdapter {
    
        private ArrayList<Fragment> mData;
        String[] tabname = {"왼쪽탭","가운데", "오른쪽탭"};
    
        public MyPagerAdapter(@NonNull FragmentManager fm) {
            super(fm);
            mData = new ArrayList<>();
            mData.add(new ColorFragment());
            mData.add(new ItemFragment());
            mData.add(new BlankFragment());
        }
    
        @NonNull
        @Override
        public Fragment getItem(int position) {
            return mData.get(position);
        }
    
        @Override
        public int getCount() {
            return mData.size();
        }
    
    
        // TapLayout 이름 지정
        @Nullable
        @Override
        public CharSequence getPageTitle(int position) {
            return tabname[position];
            //return position + " 번째";
        }
    }
    • 페이저어댑터에서 각 프래그먼트와 뷰 페이저, 탭 레이아웃을 연결시켜준다. 데이터를 연결시킨 후 앱을 실행해 화면을 움직여보면 탭과 뷰 페이저가 연결되어 함께 움직이는 것을 확인할 수 있다.

    • CharSequence는 아래 사진처럼 오버라이딩 해서 사용하면 필요한 코드를 자동 완성시켜 쓸 수 있다.

     

     

    3. 여러 프래그먼트들

    • 프래그먼트의 자바소스는 아래 그림처럼 추가해주면 된다. 이번 프로젝트에서는 프래그먼트를 연결하는 정도로만 했기 때문에 프래그먼트의 내부 소스는 다루지 않았다. 프로젝트에는 Fragment(Blank)와 Fragment(List)를 추가해주었다.

     

     

     

    댓글

Designed by Tistory.