Fragment間Fragment転送
11547 ワード
Activityにfragmentをロードするには:
左の破片
フラグメントfragment間の転送にインタフェースコールバックを定義します.
右側の破片RightFragmentはこのインタフェースを実現し、インタフェースの中の方法を書き換え、左の破片が値を伝えるのを待っています.
Tagラベルの左側のフラグメントに基づいてコールバックインタフェースオブジェクトを取得し、値を送信します.
activityにフラグメントをロードするには、3番目のパラメータにTagラベルが設定されています.
コールバックメソッドでは、右側のフラグメントに値が渡されます.
左フラグメントLeftFragmentフルコード:
右側のフラグメントRightFragmentフルコード:
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);
}
}