2016-03-19 20 views
0

FragmentPickFloor.javaDeğerleri doğrudan Fragman'dan Özel Görünüm'e geçirmek mümkün mü?

...... 

@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'daki iplikçilerden seçtiğiniz bağımlılık değerlerinde farklı arka planlar görüntülenir.

cevap

0

Dolaylı olarak evet. Parça parametrelerini parçalara setArguments() yöntemini kullanarak argümanlar olarak iletmeniz ve ardından verileri onCreateView() içinde özel görünüme iletmeniz gerekir.

Parçanızı oluşturduğunuzda, değerleri setArguments() yöntemini kullanarak iletin.

senin fragmanında Sonra
FragmentFloor fragment = new FragmentFloor(); 
Bundle args = new Bundle(); 
args.putString(Constants.FLOOR_KEY, spinFloorValue); 
args.putString(Constants.FLOOR_PART_KEY, spinPartFloorValue); 
fragment.setArguments(args); 

...

Alternatif
@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; 
} 

Eğer 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

Tavsiyene kullanılan kullanarak parçasından doğrudan etkinliğin paket verilerine erişen çalışıyorum, ama olabilir benim değerler Özel görünümüm gönderildikten sonra güncellenir. – jozwiak

+0

Bu durumda, değerleri Activity => Fragment => Custom View'dan yaymanın bir yoluna ihtiyacınız olacaktır. Birkaç seçenek vardır: ** Yeni Fragment Sihirbazı *, ** Otto ** veya ** RxJava ** gibi bir Etkinlik Veriyolu tarafından oluşturulanlar gibi bir ** FragmentInteractionListener ** kullanabilirsiniz. Her bir seçeneği araştırın ve her seçeneğin entegre edilmesine ilişkin süre göz önüne alındığında sizin için en uygun olanı belirleyin. – ayvazj

+0

Teşekkür ederim. Şimdi LayoutInflater.Factory – jozwiak

İlgili konular