-1

액티비티의 데이터를 프래그먼트로 전달할 때, 프래그먼트에서 반환 된 값은 null입니다. 프래그먼트에서 2 토스트를 설정하여 myValue의 값을 테스트하고 리턴 된 토스트가 myValue가 null 인 else 문에서 리턴 된 점을 참고하십시오.액티비티에서 프래그먼트로 데이터 전달 Null

활동 :

  case R.id.forward: 

      Bundle bundle = new Bundle(); 
      bundle.putString("message", "From Activity"); 

      Fragment_02_Contacts mainFragment = new Fragment_02_Contacts(); 
      mainFragment.setArguments(bundle); 

      getSupportFragmentManager().beginTransaction().add(android.R.id.content, mainFragment).commit(); 

      break; 

조각 :

String myValue; 
..... 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

      if (myValue != null) 
       { 
        myValue = this.getArguments().getString("message"); 

        Toast.makeText(getActivity(), "message: "+myValue, Toast.LENGTH_SHORT).show(); 
        return inflater.inflate(R.layout.fragment_02_contacts, container, false); 
       } 
      else 
       { 
        Toast.makeText(getActivity(), "message: "+myValue, Toast.LENGTH_SHORT).show(); 
        // message is null ???? 
       } 

편집 :이 내 인수를 파괴합니까

getSupportFragmentManager().beginTransaction().add(android.R.id.content, mainFragment).commit(); 

하고 시작합니다 가 나는 이유가 연계 될 수 있음을 믿는다 새 단편?

답변

1

먼저 여기에 값을 할당 한 다음이 같은 null 여부 확인 : 값이 null 경우 당신이 전에 그것을 한 적이 방법은 당신이 선택

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     myValue = this.getArguments().getString("message"); 
     if (myValue != null) 
      { 

실제로 이제까지 그것을 아무것도를 할당하기 전에 (즉 은 항상입니다.) 그 이유는 항상 else 성명서에서 끝나고 그 값을 할당 한 if에 없었기 때문입니다.

+0

내가 먼저 할당하면 응용 프로그램이 충돌합니다. java.lang.NullPointerException : null 객체 참조에서 가상 메소드 'java.lang.String android.os.Bundle.getString (java.lang.String)'을 호출하려고 시도합니다. , 응용 프로그램이 충돌을 피하기 위해 나는 if/else를 사용 했으므로 null 참조를 얻고 있기 때문에 내 응용 프로그램이 충돌합니다. – user3560827

+0

이것은 인수가 올바르게 설정되지 않았다는 것을 의미합니다. 생성자에서 전달한 다음 거기에 설정할 수 있습니까? 또한 조각을 위해 정적 인 'newInstance'를 가진 팩토리 디자인 패턴을 사용하는 것이 좋습니다. – Vucko

1

좋아, 마침내 알았어, 나는/다른 대신 try/catch 절에 변수를 넣을거야. 그리고 조각이 먼저 null로 시작하여 잡기에서 잡아서 통과 한 후에 응용 프로그램이 더 이상 충돌하지 않습니다. try 절이 데이터를 반환하는 액티비티의 값.

그래서 if/else의 아이디어는 거의 정확했지만 try/catch가되어야했습니다.

관련 문제