Fragment間Fragment転送

11547 ワード

Activityにfragmentをロードするには:
public class FragmentValueActivity extends AppCompatActivity {

    private LeftFragment leftFragment;
    private RightFragment rightFragment;

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

        initFragment();
    }

    private void initFragment() {
        leftFragment = new LeftFragment();
        rightFragment = new RightFragment();
        getSupportFragmentManager()
                .beginTransaction()
                .add(R.id.left_fragment_container, leftFragment)
                .add(R.id.right_fragment_container, rightFragment,"right")// tag -- 
                .commit();
    }
}

左の破片
フラグメントfragment間の転送にインタフェースコールバックを定義します.
public interface ValuesCallBack {
        public void setArgs(String args);
    }

右側の破片RightFragmentはこのインタフェースを実現し、インタフェースの中の方法を書き換え、左の破片が値を伝えるのを待っています.
public class RightFragment extends Fragment implements LeftFragment.ValuesCallBack{
@Override
    public void setArgs(String args) {
        textView.setText(args);
    }

Tagラベルの左側のフラグメントに基づいてコールバックインタフェースオブジェクトを取得し、値を送信します.
activityにフラグメントをロードするには、3番目のパラメータにTagラベルが設定されています.
.add(R.id.right_fragment_container, rightFragment,"right")// tag -- 
// , tag , 
    RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentByTag("right");
    callBack = rightFragment;//fragment callback ,fragment callback

コールバックメソッドでは、右側のフラグメントに値が渡されます.
@Override
    public void onClick(View v) {
        String content = editText.getText().toString();
        callBack.setArgs(content);
    }

左フラグメントLeftFragmentフルコード:
public class LeftFragment extends Fragment implements View.OnClickListener {
    private EditText editText;
    private Button button;
    private ValuesCallBack callBack;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // , tag , 
        RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentByTag("right");
        callBack = rightFragment;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View veiw = inflater.inflate(R.layout.fragment_left, container, false);

        editText = (EditText) veiw.findViewById(R.id.et_left);
        button = (Button) veiw.findViewById(R.id.btn_sure_left);
        button.setOnClickListener(this);
        return veiw;
    }

    @Override
    public void onClick(View v) {
        String content = editText.getText().toString();
        callBack.setArgs(content);
    }

    public interface ValuesCallBack {
        public void setArgs(String args);
    }

}

右側のフラグメントRightFragmentフルコード:
public class RightFragment extends Fragment implements LeftFragment.ValuesCallBack{
    private TextView textView;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_right, container, false);
        textView = (TextView) view.findViewById(R.id.tv_right);
        return view;
    }

    @Override
    public void setArgs(String args) {
        textView.setText(args);
    }
}