Android 是否可以将值直接从片段传递到自定义视图?
FragmentPickFloor.javaAndroid 是否可以将值直接从片段传递到自定义视图?,android,Android,FragmentPickFloor.java ...... @Override public void onClick(View v) { switch(v.getId()) { case R.id.btnScan: if(spinFloor.performClick() && spinPartFloor.performClick()) { extras = new Bundle();
......
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.btnScan:
if(spinFloor.performClick() && spinPartFloor.performClick()) {
extras = new Bundle();
spinFloorValue = spinFloor.getSelectedItem().toString();
spinPartFloorValue = spinPartFloor.getSelectedItem().toString();
extras.putString(Constants.FLOOR_KEY, spinFloorValue);
extras.putString(Constants.FLOOR_PART_KEY, spinPartFloorValue);
intent = new Intent(getContext(), MainActivity.class);
intent.putExtras(extras);
startActivity(intent);
FragmentCreator.fragmentTransactionSetup(new FragmentFloor(), getFragmentManager(), FragmentFloor.class.getSimpleName());
}
break;
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_floor, container, false);
}
FragmentCreator.java
public static void fragmentTransactionSetup(Fragment fragment,
FragmentManager fragmentManager,
String tag) {
fragmentManager.executePendingTransactions();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment, tag);
fragmentTransaction.addToBackStack(tag);
fragmentTransaction.commit();
}
FragmentFloor.java
......
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.btnScan:
if(spinFloor.performClick() && spinPartFloor.performClick()) {
extras = new Bundle();
spinFloorValue = spinFloor.getSelectedItem().toString();
spinPartFloorValue = spinPartFloor.getSelectedItem().toString();
extras.putString(Constants.FLOOR_KEY, spinFloorValue);
extras.putString(Constants.FLOOR_PART_KEY, spinPartFloorValue);
intent = new Intent(getContext(), MainActivity.class);
intent.putExtras(extras);
startActivity(intent);
FragmentCreator.fragmentTransactionSetup(new FragmentFloor(), getFragmentManager(), FragmentFloor.class.getSimpleName());
}
break;
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_floor, container, false);
}
TouchView.java
public TouchView(Context context, AttributeSet attrs) {
super(context, attrs);
extras = ((MainActivity) getContext()).getIntent().getExtras();
spinFloorValue = extras.getString(Constants.FLOOR_KEY);
spinPartFloorValue = extras.getString(Constants.FLOOR_PART_KEY);
}
TouchView在从FragmentPickFloor中的微调器中选择的依赖项值中显示不同的背景。是。必须使用fragments
setArguments()
方法将捆绑包参数作为参数传递给片段,然后将数据传递给onCreateView()
中的自定义视图
创建片段时,使用setArguments()方法传递值
然后在你的片段中
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_floor, container, false);
TouchView touchView = (TouchView)view.findViewById(R.id.touchView);
touchView.setSpinFloorValue(getArguments().getString(Constants.FLOOR_KEY));
touchView.setSpinPartFloorValue(getArguments().getString(Constants.FLOOR_PART_KEY));
return view;
}
或者,您可以尝试使用getActivity().getIntent()
我使用了您的建议,但是我的值会在自定义视图显示后更新。在这种情况下,您需要一种方法来传播Activity=>Fragment=>custom视图中的值。有几个选项:您可以使用FragmentInteractionListener(如New Fragment Wizard生成的)和事件总线(如Otto或RxJava)。考虑到每个选项所需的时间,研究每个选项并确定哪个最适合您。谢谢。现在我尝试使用LayoutInflater.FactorySolution是一个非常简单的解决方案。我们只需要在自定义视图中创建一个负责逻辑的函数,然后在setters之后调用它,最后使用
touchView.invalidate()