2016-03-19 15 views
0

FragmentPickFloor.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; 
    } 
} 

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

@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 D FragmentPickFloorのスピナーから選択した依存関係の異なる背景を表示します。

答えて

0

間接はい。フラグメントsetArguments()メソッドを使用してバンドルパラメータを引数としてフラグメントに渡してから、onCreateView()のカスタムビューにデータを渡す必要があります。

フラグメントを作成するときに、setArguments()メソッドを使用して値を渡します。

FragmentFloor fragment = new FragmentFloor(); 
Bundle args = new Bundle(); 
args.putString(Constants.FLOOR_KEY, spinFloorValue); 
args.putString(Constants.FLOOR_PART_KEY, spinPartFloorValue); 
fragment.setArguments(args); 

次に、あなたのフラグメントに...

@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()

@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); 

    extras = ((MainActivity) getContext()).getIntent().getExtras(); 
    touchView.setSpinFloorValue(extras.getString(Constants.FLOOR_KEY)); 
    touchView.setSpinPartFloorValue(extras.getString(Constants.FLOOR_PART_KEY)); 

    return view; 
} 
+0

を使用してフラグメントから直接、活動のバンドルデータにアクセスしてみてください可能性があり、私はあなたのアドバイスを使用しますが、私の値私のカスタムビューが表示された後に更新します。 – jozwiak

+0

その場合、Activity => Fragment => Custom Viewから値を伝播する方法が必要になります。いくつかのオプションがあります:** FragmentInteractionListener **を使用することができます。** Fragment Wizard *、** Otto **や** RxJava **のようなイベントバスによって生成されたものと同じです。統合された各オプションに関連する時間を考慮して、それぞれを調査し、どちらが最適かを判断します。 – ayvazj

+0

ありがとうございます。今私はLayoutInflater.Factoryで試しています – jozwiak

関連する問題