두 개의 조각이 있습니다 : (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()
하십시오 .Frag2
onCreateView()
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 접근자를 추가하면됩니다. 이것은 항상 저에게 효과적입니다.