package com.example.helloandroid;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;
@SuppressWarnings("deprecation")
//java코드만을 이용해 액션바 구성하기
public class MainActivity extends
AppCompatActivity implements ActionBar.TabListener {
ActionBar.Tab tabCon1, tabCon2, tabCon3;
protected void onCreate(Bundle SavedInstanceState) {
super.onCreate(SavedInstanceState);
ActionBar bar=getSupportActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
tabCon1=bar.newTab();
tabCon1.setText("치와와");
tabCon1.setTabListener(this);
bar.addTab(tabCon1);
tabCon2=bar.newTab();
tabCon2.setText("친한");
tabCon2.setTabListener(this);
bar.addTab(tabCon2);
tabCon3=bar.newTab();
tabCon3.setText("마망");
tabCon3.setTabListener(this);
bar.addTab(tabCon3);
}
//탭을 선택하게 되면 작동하는 메소드, 위에서 액셔바를 3개 선언했으므로 3개가 있음
MyTabFragment myFrags[]=new MyTabFragment[3];
//MyTabFragment 배열의 선언. 3개의 프래그먼트가 있으니, 배열은 3개
@Override
//탭을 선택하면 동작하는 코드
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
MyTabFragment myTabFrag=null;
//현재 섲택한 화면으로 사용할 변수 myTabFrag
//선택한 탭이 기존에 한 번도 선택된 적이 없다면, 프래그먼트를 생성해
//1행에서 선언한 myFrags[]의 위치에 넣는다
if(myFrags[tab.getPosition()] == null) {
myTabFrag = new MyTabFragment();
//현재 프래그먼트의 값을 지정, 그 선택한 탭의 텍스트를 tabMame
//변수에 저장. 저장된 값은 아래 클래스의 Bundle data, tabName에 사용됨
Bundle data= new Bundle();
data.putString("tabName", tab.getText().toString());
myTabFrag.setArguments(data);
//생성한 프래그먼트를 프래그먼트 배열의 해당 위치에 저장
myFrags[tab.getPosition()] = myTabFrag;
}
//기존에 해당 탭을 선택한 적이 있다면, 이를 재사용
else
myTabFrag=myFrags[tab.getPosition()];
//새로 생성했거나 기존 프래그먼트를 액션바 아래쪽 화면에 출력
ft.replace(android.R.id.content, myTabFrag);
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
//탭을 클릭하면 아래에 해당 프래그먼트들이 나오도록 코딩
//프래그컨트를 상속받는 mtyabfragment클래스를 내부 클래스로 생성
public static class MyTabFragment extends androidx.fragment.app.Fragment
{
String tabName;
public void onCreate(Bundle SavedInstanceState) {
super.onCreate(SavedInstanceState);
Bundle data= getArguments();
tabName=data.getString("tabMame");
//3개의 탭을 클릭할 때마다 다른 프래그먼트(화면)가 나오도록,
//탭을 클릭할 때 지정한 데이터로 각 프래그먼트를 지정
//위에선 탭의 이름(텍스트)를 기준으로 한다(getString)
}
//프래그먼트에 나타날 화면을 구성. 최종적으로 return baseLayout:구성한 화면 반환
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
//빈 리니어레이아웃을 java코드로 생성
LinearLayout.LayoutParams params= new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
LinearLayout baseLayout = new LinearLayout(super.getActivity());
baseLayout.setOrientation(LinearLayout.VERTICAL);
baseLayout.setLayoutParams(params);
if(tabName == "치와와")
baseLayout.setBackgroundColor(Color.RED);
if(tabName=="마망")
baseLayout.setBackgroundColor(Color.GREEN);
if(tabName=="친한")
baseLayout.setBackgroundColor(Color.BLUE);
return baseLayout;
}
}
}
'애니리뷰' 카테고리의 다른 글
실습 7-1)메뉴를 이용해 배경색을 바꾸기 (2) | 2020.08.14 |
---|---|
에디트텍스트에 url입력시 해당 링크로 이동, 화면과 프로그램 로고와 아이콘 변경 (0) | 2020.08.13 |
직풀 6-3) (0) | 2020.08.13 |
직접풀어보기 6-2) (0) | 2020.08.13 |
안드 6장. 예제 및 실습 (2) | 2020.08.12 |