힝구힝구
233
2020-10-21 18:41:18 작성 2020-10-21 18:42:01 수정됨
4
394

viewpager fragment에 데이터 삽입 방법


안녕하세요

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();
    }


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




'종합' 탭을 눌렀을 때 다음처럼 그래프가 그려지게끔 하고싶습니다.
이 화면은 Tabhost를 이용해서 한겁니다. viewpager로 변경하려구요 ㅠㅠ



다음은 코드 구조 및 코드들입니다.

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() ;
    }
}


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);
    }
}


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

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

한번만 도와주시면 감사하겠습니다 ㅠㅠ

0
  • 답변 4

  • UnknownDontknow
    830
    2020-10-21 19:25:25 작성 2020-10-21 19:26:47 수정됨

    뷰페이져의 각 탭별로 부여되는 화면조각은 프래그먼트이니 프래그먼트 코드의 onCreateView에서 저 함수를 호출해주면 되요.

  • 힝구힝구
    233
    2020-10-21 21:03:26

    오 ㄷㄷ 감사합니다 근데 프래그먼트 안에서 해당 함수 작성하면 activity 상속받은게 아니라서

    findViewById 이쪽에서 에러가 나는데..

    이거는 클래스를 따로 만들어서 생성해야되는걸..까요?

  • UnknownDontknow
    830
    2020-10-21 21:25:04

    차트 뷰는 프래그먼트의 레이아웃XML파일에 있을테니, 프래그먼트쪽의 레이아웃에서 아이디를 찾아줘야 하겠지요. onCreateView에서 inflate된 프래그먼트 레이아웃요소에서 찾아주면 되는것이므로 아래처럼 해주시면 되요.

        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_total, container, false);
            sexRateChart = view.findViewById(R.id.sexRateChart);
            return view;
        }
  • 힝구힝구
    233
    2020-10-21 22:28:50

    아 .. ??! 친절한 설명 감사합니다! 이해됐어욤

  • 로그인을 하시면 답변을 등록할 수 있습니다.