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

Fragment에서 Activity로 데이터 전달ㅠㅠㅠㅠㅠㅠ

0 추천

현재 제가 MainActivity에 editText와 Tab이 있는데요...

Tab구현을 MainActivity에서 TabAdapter를 이용해서 

tap position에따라 Fragment1,Fagment2 를 생성하게 되어있습니다......

Fragment에서는 이미지와 텍스트가 있는 커스텀 리스트뷰를 구현했는데 

이때 선택한 리스트 데이터를 MainActivity에서 가져와서 

리스트 데이터 중 텍스트를 editText에 설정하려 했습니다....

보통 Fragment 에서 Activity로 데이터를 전달할 때 리스너를 이용하면 된다해서 만들긴했는데

제가지금 Activity -> TabAdapter -> Fragment 이런식으로 중간에 어댑터가 껴있어서

어떻게 해야할지 모르겠어요....

MainActivity.java
@Override
protected  void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    Button button = (Button)findViewById(R.id.insertButton);
    editText1 = (EditText)findViewById(R.id.editText1);
    editText2 = (EditText)findViewById(R.id.editText2);


    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.addTab(tabLayout.newTab().setText("검색기록"));
    tabLayout.addTab(tabLayout.newTab().setText("즐겨찾기"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    final MyTabAdapter adapter = new MyTabAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());

        }
        @Override
        public void onTabUnselected(TabLayout.Tab tab) {}
        @Override
        public void onTabReselected(TabLayout.Tab tab) {}
    });


    // Set click Listener
    button.setOnClickListener(this);

}
MyTabAdapter.java
public class MyTabAdapter extends FragmentStatePagerAdapter {

    int _numOfTabs;
    
    public MyTabAdapter(FragmentManager fm, int numOfTabs) {
        super(fm);
        this._numOfTabs = numOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                MyTabFragment1 tab1 = new MyTabFragment1();

                return tab1;
            case 1:
                MyTabFragment2 tab2 = new MyTabFragment2();

                return tab2;
            default:
                return null;
        }
    }
    
    @Override
    public int getCount() {
        return _numOfTabs;
    }
}
MyTabFragment1
ublic class MyTabFragment1 extends Fragment {

    private ListView mListView;
    private MyItem selectItem;
    private MyTabListener tabListener;

    public MyTabFragment1() {
        super();
    }

    public void setTabListener(MyTabListener tabListener){
        this.tabListener = tabListener;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.activity_tab1, container, false);
        mListView = (ListView) view.findViewById(R.id.listView1);

        final MyListAdapter myListAdapter;

        myListAdapter = new MyListAdapter();
        
        ArrayList<String> myArrayList = new ArrayList<>();
        myArrayList.add("최근기록 1");
        myArrayList.add("최근기록 2");
        myArrayList.add("최근기록 3");
        for (int i = 0; i < 3; i++) {
            myListAdapter.addItem(myArrayList.get(i));
        }

        myListAdapter.selectItem(-1);
        mListView.setAdapter(myListAdapter);

        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                // mMyAdapter.selectItem(position);
                selectItem = myListAdapter.getItem(position);
                tabListener.onListClicked(selectItem);

            }
        });


        return view;
    }

}
seehwanjang (140 포인트) 님이 2017년 12월 6일 질문

1개의 답변

0 추천
MainActivity에 public method를 하나 만들고, 이렇게 호출하면 됩니다.

((MainActivity)getActivity()).publicMethod();
Will Kim (43,170 포인트) 님이 2017년 12월 7일 답변
...