Fragment 시리즈 해석의 세 가지 ---Fragment와 Fragment,Activity 사이의 전가
1. Fragment의 숙주인Activity에 변수를 만들고 set과 get 방법을 설정한 다음 Fragment에서 이 값을 꺼낼 수도 있고 변경할 수도 있습니다.이런 방법은 일반적으로 전달할 값이 비교적 간단하거나 내용이 단일한 말에 쓰인다.
2.
Fragment의 숙주인Activity에서 어떤 Fragment를 붙였는지 판단하고 값을 전달하는 방법을 정의한다.
public void switchConent(Fragment fragment, String title,
String fragmentFlag, Bundle bundle) {
// bundle
fragment.setArguments(bundle);
mContent = fragment;
if (!"".equals(fragmentFlag{
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,fragment,fragmentFlag).addToBackStack(fragmentFlag).commit();
} else {
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, fragment).commit();
}
}
이 방법을 통해 우리는 첨부할 Fragment와 전달할 내용 bundle을 선택할 수 있다. 위 코드는 사용된 Replace로 대체되고 TAG에 따라 리콜 창고에 가입할지 여부를 판단할 수 있다. 이것은 나의 이전 프로젝트에서 쓴 것이다.물론 하이드와 쇼 방법을 사용한다면 안 된다.show와hide 방법이 값을 전달하지 않았기 때문입니다.
3. 리셋을 정의하면 우리는 하나의 인터페이스를 정의할 수 있다. 그 안에 추상적인 리셋 방법을 써서 모든 Fragment가 그것을 실현하도록 한다. 이때 베이스 Fragment를 정의한 다음Activity에 setInterface() 방법을 쓰는 것이 가장 좋다. 그 안의 매개 변수는 인터페이스 대상(즉 우리의 Fragment)이다. 그리고 Fragment를 전환할 때우리는 setInterface 방법을 먼저 호출하여 우리가 바꾸려고 하는Fragment를 전송한 다음에 이 인터페이스의 추상적인 방법을 호출한다. 추상적인 방법의 매개 변수는 우리가 전달하고자 하는 매개 변수이다. 이때 첨부된 Fragment는 인터페이스를 실현하는 추상적인 방법을 호출하여 매개 변수를 수신하는 목적을 달성한다.내 손에 있는 컴퓨터가 매우 끊겨서 개발 도구를 사용할 수 없기 때문에 나는 대체적인 코드를 간단하게 썼다. 뜻은 다음과 같다.
interface MyCallBack{
void callBack(String result);
}
public class MainActivity
{
private MyCallBack myCallBack;
public void setMycallBack(MyCallBack myCallBack){
this.myCallBack=myCallBack;
}
public void setFragment(String result){
// Fragment , replace,add show,hide
myCallBack.callBack(String result);
}
}
public class MyFragmentA implements MyCallBack{
public void callBack(String result){
// ,
}
public void switchFragment(String result){
// Fragment, Fragment
getActivity().setFragment(String result)
}
}
2. Fragment와 Activity 사이의 전송 값:
1. Activity가 Fragment에 값을 전달합니다.
이것은 간단합니다. 처음에 Fragment를 추가할 때 bundle를 사용하여 값을 전달합니다.
fragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,fragment,fragmentFlag).addToBackStack(fragmentFlag).commit();
그리고 Fragment에 코드 하나만 있으면 돼요.
Bundle bundle = getArguments();// activity Bundle
2. Fragment가 자신의 Activity에 값을 전달합니다.
1. Fragment에 콜백 인터페이스를 쓴다.activity에서 이 리셋 인터페이스 3을 실현하고Fragment에서onAttach 방법에서activity에서 실현된 실례화 인터페이스 대상 4를 얻어 인터페이스의 대상으로 값을 전달합니다
MainActivity:
public class MainActivity extends Activity implements CallBackValue{
private TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = (TextView) findViewById(R.id.tv1);
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.contents, new Fragmen1());
transaction.commit();
}
//
@Override
public void SendMessageValue(String strValue) {
// TODO Auto-generated method stub
tv1.setText(strValue);
}
}
Fragment:
public class Fragmen1 extends Fragment{
private Button btn1;
private EditText et1;
CallBackValue callBackValue;
/**
* fragment activity
*/
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
// fragment activity
callBackValue =(CallBackValue) getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment_layout1, container, false);
btn1 = (Button) view.findViewById(R.id.btn1);
et1 = (EditText) view.findViewById(R.id.et1);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String strValue = et1.getText().toString().trim();
callBackValue.SendMessageValue(strValue);
}
});
return view;
}
//
public interface CallBackValue{
public void SendMessageValue(String strValue);
}
}
3. Fragment에서 다른 Activity에 값을 전달합니다.
이것은 사실Fragment에서 그의Activity를 호출해서 다른Activity로 값을 전달한 것이다
context = getActivity().getApplicationContext();
Intent intent = new Intent(context, .class);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.