이전 글에서 Navigation Drawer하고 Tabs를 붙이는 예제를 해보았습니다.
디자인적인 부분만 작업하였기 때문에 Tabs나 Navigation Drawer 에 버튼 클릭 부분을
구현해 보도록 하겠습니다.
먼저 MainActivity.java에 Viewpager,Tablayout,Tabitem을 추가하도록 하겠습니다.
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.widget.Toolbar;
import androidx.viewpager2.widget.ViewPager2;
import android.os.Bundle;
import com.google.android.material.navigation.NavigationView;
import com.google.android.material.tabs.TabItem;
import com.google.android.material.tabs.TabLayout;
public class MainActivity extends AppCompatActivity {
DrawerLayout drawerLayout;
ActionBarDrawerToggle toggle;
NavigationView navigationView;
ViewPager2 pager;
TabLayout mTabLayout;
TabItem tab1,tab2,tab3,tab4,tab5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
pager = findViewById(R.id.viewpager);
mTabLayout = findViewById(R.id.tablayout);
tab1 = findViewById(R.id.tab1);
tab2 = findViewById(R.id.tab2);
tab3 = findViewById(R.id.tab3);
tab4 = findViewById(R.id.tab4);
tab5 = findViewById(R.id.tab5);
drawerLayout = findViewById(R.id.drawer);
navigationView = findViewById(R.id.nav_view);
toggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.open,R.string.close);
drawerLayout.addDrawerListener(toggle);
toggle.setDrawerIndicatorEnabled(true);
toggle.syncState();
}
}
그리고 빈 fragment를 추가합니다.
res->New->Fragment->Fragment(Blank) 빈 fragment를 선택해줍니다.
탭 갯수만큼 만들어주시면 됩니다. 이름도 각 탭에 맞게 만들어주시구요.
그런다음 java 클래스를 하나 추가합니다.
New-> Java Class -> PagerAdapter.java
package com.apprichkorea.misstrot;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.lifecycle.Lifecycle;
import androidx.viewpager2.adapter.FragmentStateAdapter;
public class PagerAdapter extends FragmentStateAdapter {
private int tabsNumber;
public PagerAdapter(@NonNull FragmentManager fm, Lifecycle l, int tabs) {
super(fm, l);
this.tabsNumber = tabs;
}
@NonNull
@Override
public Fragment createFragment(int position) {
switch (position){
case 0:
return new First();
case 1:
return new Second();
case 2:
return new Three();
case 3:
return new Four();
case 4:
return new Five();
default: return null;
}
}
@Override
public int getItemCount() {
return tabsNumber;
}
}
각 탭을 클릭했을때 이동할 fragment를 생성해서 넘어가게 코딩을 해 줍니다.
이제 마지막으로 MainActivity.java에서 이벤트 리스너와 아답터를 연결하는 부분을 코딩해 줍니다.
package com.apprichkorea.misstrot;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import androidx.viewpager2.widget.ViewPager2;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.google.android.material.navigation.NavigationView;
import com.google.android.material.tabs.TabItem;
import com.google.android.material.tabs.TabLayout;
public class MainActivity extends AppCompatActivity {
DrawerLayout drawerLayout;
ActionBarDrawerToggle toggle;
NavigationView navigationView;
ViewPager2 pager;
TabLayout mTabLayout;
TabItem tab1,tab2,tab3,tab4,tab5;
PagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
pager = findViewById(R.id.viewpager);
mTabLayout = findViewById(R.id.tablayout);
tab1 = findViewById(R.id.tab1);
tab2 = findViewById(R.id.tab2);
tab3 = findViewById(R.id.tab3);
tab4 = findViewById(R.id.tab4);
tab5 = findViewById(R.id.tab5);
drawerLayout = findViewById(R.id.drawer);
navigationView = findViewById(R.id.nav_view);
toggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.open,R.string.close);
drawerLayout.addDrawerListener(toggle);
toggle.setDrawerIndicatorEnabled(true);
toggle.syncState();
adapter = new PagerAdapter(getSupportFragmentManager(), getLifecycle(),mTabLayout.getTabCount());
pager.setAdapter(adapter);
mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
pager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
//pager.addOnLayoutChangeListener((View.OnLayoutChangeListener) new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
}
}
이렇게 하고 컴파일을 하면 탭바를 누를때마다 다른 fragment화면이 나오게 됩니다.
'안드로이드개발' 카테고리의 다른 글
안드로이드 Unity Ads 적용하기 (0) | 2020.09.14 |
---|---|
안드로이드 Navigation Drawer with Tabs (1/2) (0) | 2020.08.28 |
Youtube API 없이 Youtube Player 사용하기 (0) | 2020.08.19 |