Fragment 시리즈 해석의 세 가지 ---Fragment와 Fragment,Activity 사이의 전가

9110 단어 AndroidFragment
오늘 이 글은 Fragment와 관련된 전가에 대해 이야기합시다.1、먼저 Fragment와 Fragment 사이에 어떻게 가치가 있는지 말해 봅시다.
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);

좋은 웹페이지 즐겨찾기