메인에서 프래그먼트로 값을 전달할 때 질문입니다.
조회수 2705회
메인에서 어떤 String 값을 intent를 통해서 2번째화면으로 보냈습니다. 2번째화면에서는 3개의 탭과 뷰페이저를 이용하고 있고 각각의 탭은 프래그먼트로 이루어져 있습니다. 그런데 2번째화면에서 버튼을 클릭한다던지 그럴 때에는 메인에서 넘어온 String값을 다시 프래그먼트로 넘겨주는게 가능한데, 클릭이벤트나 무슨 이벤트가 없으면 메인에서 넘어온 String값이 프래그먼트로 넘어가지를 않습니다. 무슨 문제일까요?
Intent intent = getIntent();
if(intent != null) {
token = intent.getStringExtra("token");
uid = intent.getStringExtra("uid");
client = intent.getStringExtra("client");
if(tab1 != null) {
tab1 = (FirstTabFragment) findFragmentByPosition(0);
tab1.setAuth(token, uid, client);
}
Log.e("fff", "aa - " + token);
Log.e("fff", "aa - " + uid);
Log.e("fff", "aa - " + client);
//asdfa(token, uid, client);
}
2번째화면에서 이런식으로 하면 프래그먼트로 값이 넘어가지가 않습니다.
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(tab1 != null) {
tab1 = (FirstTabFragment) findFragmentByPosition(0);
tab1.setAuth(token, uid, client);
}
}
});
}
그런데 이런식으로 2번째화면에서 임의의 버튼을 생성한뒤 클릭할 때 넘겨주면 프래그먼트에 넘어간 것을 확인했습니다. 그런데 저는 메인에서 2번째화면으로 String값이 넘어온 뒤 바로 프래그먼트로 넘겨주려고 합니다. 버튼같은 것을 클릭하지 않고요.
어떻게 해야할까요 ㅜ
2 답변
-
현재 코드에서 가장 간단한 방법은 FirstTabFragment에서 다음과 같이 직접 액티비티의 인텐트 정보를 가져오는 것일듯 합니다.
String token = getActivity().getIntent().getStringExtra("token"); String uid = getActivity().getIntent().getStringExtra("uid"); String client = getActivity().getIntent().getStringExtra("client");
위 코드를 프래그먼트의 onCreateView()와 같은 함수에 추가해서 값이 제대로 전달되는지 확인해보세요.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
private FirstTabFragment tab1; private SecondTabFragment tab2; private ThirdTabFragment tab3; Intent intent = getIntent(); if(intent != null) { token = intent.getStringExtra("token"); uid = intent.getStringExtra("uid"); client = intent.getStringExtra("client"); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); toolbar.setTitle("게 시 판"); tabLayout = (TabLayout) findViewById(R.id.tab_layout); tabLayout.addTab(tabLayout.newTab().setText("")); tabLayout.addTab(tabLayout.newTab().setText("")); tabLayout.addTab(tabLayout.newTab().setText("")); tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); viewPager = (ViewPager) findViewById(R.id.viewpager); adapter = new ViewPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount()); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); viewPager.setOffscreenPageLimit(3); 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) { } }); if(tab1 != null) { tab1 = (FirstTabFragment) findFragmentByPosition(0); tab1.setAuth(token, uid, client); } Log.e("fff", "aa - " + token); Log.e("fff", "aa - " + uid); Log.e("fff", "aa - " + client); }
이런식으로 코드를 수정했는데도 되지를 않습니다(tab1 == null)입니다. 그런데 버튼을 클릭하면 tab1 != null이 됩니다. 뭘 잘못한거일까요..
댓글 입력