마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

viewpager fragment에 데이터 삽입 방법

0 추천
안녕하세요

tablayout이랑 viewpager를 이용해서 화면을 구성중인데,

화면 구성은 성공했는데 이 안에 데이터를 어떻게 맵핑하는지를 잘 모르겠습니다.

일단 실험용으로 하나 만들어보려구요.

먼저 mpAndroidchart를 이용해서 차트를 그리는 함수입니다. 하드코딩된거에요.

public void sexRateChart(){
        PieChart sexRateChart;
        sexRateChart = findViewById(R.id.sexRateChart);
        sexRateChart.setUsePercentValues(true);
        sexRateChart.getDescription().setEnabled(true);
        sexRateChart.setExtraOffsets(5f, 10f, 5f, 5f);
        sexRateChart.setDragDecelerationFrictionCoef(0.95f);
        sexRateChart.setDrawHoleEnabled(false);
        sexRateChart.setHoleColor(Color.BLACK);
        sexRateChart.setTransparentCircleRadius(61f);

        ArrayList sexValues = new ArrayList();
        sexValues.add(new PieEntry(63.0F, "남성"));
        sexValues.add(new PieEntry(37.0F, "여성"));

        sexRateChart.animateY(2000, Easing.EaseInOutCubic);

        PieDataSet sexDataSet = new PieDataSet((List)sexValues, "성별");
        sexDataSet.setSliceSpace(3.0F);
        sexDataSet.setSelectionShift(2.0F);

        PieData sexData = new PieData((IPieDataSet)sexDataSet);
        sexData.setValueTextSize(10.0F);
        sexData.setValueTextColor(Color.BLACK);

        sexRateChart.setData(sexData);
        sexRateChart.invalidate();
    }

이 친구를 각 탭마다 설정해주고 싶습니다. 현재 탭 구성은 다음과 같습니다.

 

화면 구성

 

ResultActivity.java

public class ResultActivityy extends AppCompatActivity {
private ViewPager mViewPager;
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result2);

        mViewPager = findViewById(R.id.layout_viewPager);
        setupViewPager(mViewPager);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.layout_tab);
        tabLayout.setupWithViewPager(mViewPager);
    }

    public void setupViewPager(ViewPager viewPager) {
        adapter.addFragment(new FragmentTotal(), "종합");
        adapter.addFragment(new FragmentKeyword(), "키워드 분석");
        adapter.addFragment(new FragmentEmotion(), "감정 분석");
        adapter.addFragment(new FragmentEtc(), "기타 정보");

        viewPager.setAdapter(adapter);
    }
}

 

FragmentTotal (종합 탭 프래그먼트)

 

public class FragmentTotal extends Fragment {
    ViewPager viewPager;

    public void Fragment_Total(){

    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_total, container, false);
        return view;
    }
}

ViewPagerAdapter (어댑터)

public class ViewPagerAdapter extends FragmentStatePagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public void addFragment(Fragment fragment, String title){
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
    public ViewPagerAdapter(FragmentManager fm){
        super(fm);
    }
    @Override
    public Fragment getItem(int position) { return mFragmentList.get(position); }

    @Override
    public int getCount() {
        return mFragmentList.size() ;
    }
}

이렇게 짜여진 상태입니다. fragment xml은 관계없어서 따로 첨부하지 않았습니다.

'종합' 탭을 눌렀을 때 상단의 sexRateChart() 함수를 호출해서 데이터가 셋팅되게끔 하고 싶은데, 어디다 배치를 해야될지 잘 모르겠습니다.

한번만 도와주시면 감사하겠습니다 ㅠㅠ
꼬또농 (160 포인트) 님이 2020년 10월 21일 질문
꼬또농님이 2020년 10월 21일 수정
아 그리고 처음 질문올려보는데 code 로 감싸서 코드올리면
Maximum length is 8000 characters 라면서 업로드가 안되네요..
이건 원래 안되는건가요?

1개의 답변

+1 추천
 
채택된 답변

아래 부분이 실제 화면에 보여지는 코드입니다.

 public void setupViewPager(ViewPager viewPager) {
        adapter.addFragment(new FragmentTotal(), "종합");
        adapter.addFragment(new FragmentKeyword(), "키워드 분석");
        adapter.addFragment(new FragmentEmotion(), "감정 분석");
        adapter.addFragment(new FragmentEtc(), "기타 정보");

        viewPager.setAdapter(adapter);
    }

PagerAdapter가 ViewPager에 연결되고 PagerAdapter에서 생성된 Fragment 들이 각각의 페이지가 됩니다. 그러니까 위에 있는 각각의 프레그먼트 안에 챠트를 보여주는 코드를 집어넣으셔야 해요. 

챠트를 보여주는 코드가 비슷하거나 일정한 패턴이 있다면 공통적으로 사용할 프레그먼트를 abstract class 로 만들어서 기본적인 코드를 거기에 두시고 이걸 상속받아서 사용하세요.

spark (224,800 포인트) 님이 2020년 10월 22일 답변
꼬또농님이 2020년 11월 14일 채택됨
아이고 이미 해결했어서 이제서야 확인했네요 ㅠㅠ 늦었지만 친절한 답변 감사드립니다!
...