【发布时间】:2015-01-24 04:57:02
【问题描述】:
我正在创建一个应用程序,但我对如何在片段之间进行通信有疑问,我知道我必须与父 Activity 进行通信等等,我的问题更倾向于最佳实践。我的应用程序由一个带有导航抽屉的 MainActivity 组成,它根据选择调用一个片段并将其放在主屏幕上。 我有 2 个片段,需要通过一个按钮调用另一个片段(我可以毫无问题地将其转换为活动)打开相机扫描条形码(BarScanFragment)(https://github.com/dm77/barcodescanner)。
我的问题是可以知道哪个片段称为 BarScanFragment,以便我可以将参数发送到正确的片段,以及如何实现它。
BarScanFragment.java
public class BarScanFragment extends Fragment implements ZXingScannerView.ResultHandler{
private ZXingScannerView mScannerView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mScannerView = new ZXingScannerView(getActivity());
return mScannerView;
}
@Override
public void onResume() {
super.onResume();
mScannerView.setResultHandler(this);
mScannerView.startCamera();
}
@Override
public void onPause() {
super.onPause();
mScannerView.stopCamera();
}
@Override
public void handleResult(Result result) {
Log.i("TAG", result.getText());
Bundle args = new Bundle();
args.putString("barcodeScan", result.getText());
}
FragmentA.java
…… ......
barcodeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment content = new BarScanFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.flFragmentContainer, content).addToBackStack("TRADEIN")
.commit();
/*Intent intent = new Intent(rootView.getContext(), BarcodeScannerActivity.class);
startActivity(intent);*/
}
});
片段 b.java
.....
.....
barcodeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment content = new BarScanFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.flFragmentContainer, content).addToBackStack("INFOPRODUCT")
.commit();
/*Intent intent = new Intent(rootView.getContext(), BarcodeScannerActivity.class);
startActivity(intent);*/
}
});
【问题讨论】:
-
您使用的是
android.app.Fragment而不是android.app.supportv4.Fragment?很有趣。 -
该项目是针对非常特定的设备,所以我的目标是 minSdkVersion=14,我不需要使用支持库
-
按钮监听器是否知道哪个片段正在创建 BarScanFragment?
-
@user3249477,每个片段都有自己的按钮和自己的按钮监听器