Android/공부
[안드로이드] Fragment 프래그먼트 예제
꾸끄꾸꾸
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)를 추가해주었다.