android:id="@+id/tv_fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fragment 영역"
android:textColor="#FFFFFF"
android:textSize="30dp"
/>
<Button
android:id="@+id/btn_fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Activity의 TextView에 접근"
android:textColor="#000000"
/>
</LinearLayout>
[MainActivity.java]
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity
{
LinearLayout ll_fragment;
TextView tv_activity;
Button btn_activity;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ll_fragment = (LinearLayout)findViewById(R.id.ll_fragment);
tv_activity = (TextView)findViewById(R.id.tv_activity);
btn_activity = (Button)findViewById(R.id.btn_activity);
btn_activity.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
MainFragment mainFragment = (MainFragment) getFragmentManager().findFragmentById(R.id.ll_fragment);
mainFragment.changeFragmentTextView("호호호");
}
});
replaceFragment();
}
public void replaceFragment()
{
MainFragment mainFragment = new MainFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.ll_fragment, mainFragment);
fragmentTransaction.commit();
}
public void changeText(String text)
{
tv_activity.setText(text);
}
}
[MainFragment.java]
public class MainFragment extends Fragment
{
TextView tv_fragment;
Button btn_fragment;
public MainFragment()
{
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_main, container, false);
tv_fragment = (TextView)view.findViewById(R.id.tv_fragment);
btn_fragment = (Button)view.findViewById(R.id.btn_fragment);
btn_fragment.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
((MainActivity)getActivity()).changeText("하하하");
}
});
return view;
}
public void changeFragmentTextView(String text)
{
tv_fragment.setText(text);
}
}
Fragment에서 Activity 접근
이 부분은 검색하면
바로 나오는 부분이기도 하고
예전에 따로 이와 관련된
글을 살짝 썼던 기억이 있습니다.
접근하는 방법
Fragment에서
((MainActivity)getActivity).변수
((MainActivity)getActivity).메서드
위 코드를 보면
Fragment에서 버튼을 눌렀을때
Activity에 존재하는 메서드에
접근을 하였습니다.
btn_fragment.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
((MainActivity)getActivity()).changeText("하하하");
}
});
Activity의 changeText라는
메서드에 "하하하"라는 String을
넘겨주었습니다.
Activity의 changeText 메서드를 보면
public void changeText(String text)
{
tv_activity.setText(text);
}
Fragment에서 넘어온 String값을
받아서 Activity에 있는 TextView에
setText값으로 넣어주는 것을
확인 할 수 있습니다.
Activity에서 Fragment 접근
이 부분은
위에 있는 Fragment에서 Activity접근하기
보다는 덜 사용해서 그런지..
모르시는 분들이 은근히 많습니다.
제가 만들고 있는 앱에서도
이 부분을 사용하기는 하는데
특수한 상황에서 사용하고 있습니다.
(설명하기에는 너무 애매한 경우라 또. ㅎㅎ)
코드를 보면
btn_activity.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
MainFragment mainFragment = (MainFragment) getFragmentManager().findFragmentById(R.id.ll_fragment);
mainFragment.changeFragmentTextView("호호호");
}
});
1줄 더 늘었지만
역시 어렵지는 않습니다.
첫번째 줄이 그나마
생소한 코드일 수 있습니다.
MainFragment mainFragment = (MainFragment) getFragmentManager().findFragmentById(R.id.ll_fragment);
이 부분인데 아마
findFragmentById의 id가
어떤건지 헷갈릴수도 있습니다.
이 id는
Fragment 교체할때의
Layout영역입니다.
public void replaceFragment()
{
MainFragment mainFragment = new MainFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.ll_fragment, mainFragment);
fragmentTransaction.commit();
}
이 부분이 되겠습니다!
출처: http://itpangpang.xyz/309 [ITPangPang]
출처: http://itpangpang.xyz/309 [ITPangPang]
'Android' 카테고리의 다른 글
리사이클러뷰 아이템 클릭 이벤트 (0) | 2018.07.26 |
---|---|
프래그먼트 생명주기 (0) | 2018.07.23 |
안드로이드 OkHttp3를 활용한 동영상 전송 (1) | 2018.07.18 |
옵션 메뉴(Menu) 사용방법 (0) | 2018.07.11 |
Android에서 타이틀바(TitleBar) 없애기 (0) | 2018.07.11 |