[android] Fragments에서 setArguments () 및 getArguments () 메서드를 사용하는 방법은 무엇입니까?

두 개의 조각이 있습니다 : (1) Frag1 (2) Frag2.

Frag1

bundl = new Bundle();
bundl.putStringArrayList("elist", eList);

Frag2 dv = new Frag2();
dv.setArguments(bundl);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.the_fragg,dv);
ft.show(getFragmentManager().findFragmentById(R.id.the_fragg));
ft.addToBackStack(null);
ft.commit();

Frag2에서이 데이터를 어떻게 얻습니까?



답변

클래스에 getArguments()속하는 라는 메서드가 있습니다 Fragment.


답변

의 메소드를 호출 getArguments()하십시오 .Frag2onCreateView()

public class Frag2 extends Fragment {

     public View onCreateView(LayoutInflater inflater,
         ViewGroup containerObject,
         Bundle savedInstanceState){
         //here is your arguments
         Bundle bundle=getArguments();

        //here is your list array 
        String[] myStrings=bundle.getStringArray("elist");
     }
}


답변

예 : 데이터 추가 :-

   Bundle bundle = new Bundle();
   bundle.putString("latitude", latitude);
   bundle.putString("longitude", longitude);
   bundle.putString("board_id", board_id);
   MapFragment mapFragment = new MapFragment();
   mapFragment.setArguments(bundle);

예 : 데이터 가져 오기 :-

String latitude =  getArguments().getString("latitude")


답변

Frag1에서 :

Bundle b = new Bundle();

b.putStringArray("arrayname that use to retrive in frag2",StringArrayObject);

Frag2.setArguments(b);

Frag2에서 :

Bundle b = getArguments();

String[] stringArray = b.getStringArray("arrayname that passed in frag1");

그렇게 간단합니다.


답변

조각을 올바른 방법으로 인스턴스화하십시오!

getArguments() setArguments()메서드는 정적 메서드를 사용하여 Fragment를 인스턴스화 할 때 매우 유용합니다.
Myfragment.createInstance(String msg)

어떻게하나요?

조각 코드

public MyFragment extends Fragment {

    private String displayMsg;
    private TextView text;

    public static MyFragment createInstance(String displayMsg)
    {
        MyFragment fragment = new MyFragment();
        Bundle args = new Bundle();
        args.setString("KEY",displayMsg);
        fragment.setArguments(args);           //set
        return fragment;
    }

    @Override
    public void onCreate(Bundle bundle)
    {
        displayMsg = getArguments().getString("KEY"):    // get 
    }

    @Override
    public View onCreateView(LayoutInlater inflater, ViewGroup parent, Bundle bundle){
        View view = inflater.inflate(R.id.placeholder,parent,false);
        text = (TextView)view.findViewById(R.id.myTextView);
        text.setText(displayMsg)    // show msg
        returm view;
   }

}

인스턴스를 생성하는 동안 문자열을 전달한다고 가정 해 보겠습니다. 이것이 당신이 할 방법입니다.

MyFragment.createInstance("This String will be shown in textView");

더 읽어보기

1) 왜 Myfragment.getInstance (String msg)가 new MyFragment (String msg)보다 선호됩니까?
2) 프래그먼트의 샘플 코드


답변

프리미티브 이외의 객체를 보내려는 저와 같은 사람들에게는 프래그먼트에서 매개 변수화 된 생성자를 만들 수 없기 때문에 프래그먼트에 setter 접근자를 추가하면됩니다. 이것은 항상 저에게 효과적입니다.


답변