2014-06-16 5 views
2

액티비티에서 값 (String)을 가져온 다음 어떻게 조각에서 사용할 수 있습니까? 오류가android에서 액티비티의 값을 프래그먼트로 전달하는 방법

fragment.java 발생하는

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    String strtext = getArguments().getString("edttext"); 
    View rootView = inflater.inflate(R.layout.fragment_user_info, 
      container, false); 

    return rootView; 
} 

이 현재 코드에서 일어나고있는 일이다

Bundle bundle = new Bundle(); 
bundle.putString("edttext", "From Activity"); 
UserInfoFragment fragobj = new UserInfoFragment(); 
fragobj.setArguments(bundle); 
+0

보고있는 오류가 무엇인가요? –

답변

1

오류는 NullPointerException입니까? 맞습니까?

String strtext = getArguments().getString("edttext"); 

(조각의 생성자가 이미 호출 된 후 활동에) 당신이 그들을 할당하기 전에 :

fragobj.setArguments(bundle); 

보관할 당신이 (조각의 생성자) 인수를 읽을 수 있기 때문에

입니다 생성자는 간단합니다. 가장 좋은 방법은 지금과 같은이 가이드 https://stackoverflow.com/a/9245510/2444099에 따라 정적 팩토리 메소드를 newInstance(String edttext) 만드는 것입니다 : 새 단편 인스턴스를 취득해야 할 때마다

public static UserInfoFragment newInstance(String edttext) { 
    UserInfoFragment myFragment = new UserInfoFragment(); 

    Bundle args = new Bundle(); 
    args.putInt("edttext", edttext); 
    myFragment.setArguments(args); 

    return myFragment; 
} 

그런 다음 생성자 대신이 팩토리 메소드를 사용합니다.

1

activity.java :

  1. 당신이 만든 조각

  2. onCreateView() 메서드에서 인수를 얻습니다.

  3. 액티비티에서 인수를 설정했습니다. 즉

, 당신은 인수 당신이 그들을 설정 한 전에를 호출하고 있습니다. Fragment Documentation에 따라 정적 메소드를 사용하여 Fragment를 인스턴스화해야합니다. 그것은 다음과 같이 보일 것입니다.

//Bundle bundle = new Bundle(); 
//bundle.putString("edttext", "From Activity"); 
//UserInfoFragment fragobj = new UserInfoFragment(); 
//fragobj.setArguments(bundle); 

UserInfoFragment fragobj = UserInfoFragment.newInstance("From Activity"); 

공지 사항이 어떻게 지금, 당신이도를 만들 필요가 없습니다 :

당신의 조각 클래스에서

는, 다음을 수행하십시오 활동에

/** 
* Create a new instance of UserInfoFragment, initialized to 
* show the text in str. 
*/ 
public static MyFragment newInstance(String str) { 
    MyFragment f = new MyFragment(); 

    // Supply index input as an argument. 
    Bundle args = new Bundle(); 
    args.putString("edttext", str); 
    f.setArguments(args); 

    return f; 
} 

그리고 지금,이 코드를 추가 액티비티 클래스에 묶어서 설정하면 정적 인 newInstance() 메서드에 의해 처리됩니다.

관련 문제