코로나로 인해 집구석에 박혀 있는 시간이 많아지다보니

우리 딸래미가 많이 심심했나 봅니다.

 

평상시 유튜브로 라임튜브같은 걸 많이 시청하다보니 

자기도 따라하고 싶었나 봅니다.

 

중간중간 실수도 하고 재미있게 촬영하였습니다.

 

 

 

마리모 키우기로 컨텐츠를 한번 만들어보았습니다.

 

너무 좋아하면서 재밌어 하네요. 

집에서만 있으면 TV나 휴대폰만 보려고 하는데 이렇게 유튜브 컨셉으로 방송을 한번 찍어보는것도 재미있을것 

같습니다.

 

은애야 커서 방송하지말고 의사해~~ ㅋㅋ

 

사랑해 은애야~!

 

'일상' 카테고리의 다른 글

추석 전날 풍경~~~~!  (0) 2020.09.29

유니티를 개발하다보면 엄청나게 많은 종류의 빌드에러를 맞이하게 됩니다.

 

 

이곳저곳 구글링 신에게 도움을 청해보지만 정확한 답을 구하기는 쉽지 않습니다.

 

D8 : Program type already present : com.unity3d.ads.mediation.IUnityAdsExtendedListener

 

에러 내용으로 추측해 보면 UnityAds 관련 모듈이 이미 있다고 나는 에러 같습니다.

 

먼저 프로젝트 부분을 살펴보겠습니다.

 

UnityAds 모듈 부분이 존재하고 있습니다. 

그리고 또 다른 UnityAds부분을 로드하는 Services 탭을 살펴보겠습니다.

위와 같이 Services 탭에 Unity Ads를 Enable 시키고 프로젝트 파일에서도 Unity Ads를 임포트 시켜서

충돌이 일어난 것 같습니다.

 

소스 부분보다 Services 탭에 있는 Unity Ads를 Disable 시켜서 다시 컴파일 하면 정상적으로

완료됩니다.

 

알고 나면 쉬운 부분인데 프로그래밍 작업을 하다보면 이런 사소한 실수로 오랫동안 헤매는 경우가 있습니다.

프로그램 짜는 시간보다 디버깅하는 시간이 더 길어지면 그것보다 비효율적인 일이 어디 있겠습니까?

 

저처럼 헤매지 마시라고 에러 부분 종종 올려드리겠습니다.

 

 

이전 글에서 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화면이 나오게 됩니다.

 

+ Recent posts