2015-01-19 21 views
0

활동과 단편 간의 통신을 구현하려고하지만 어떻게해야하는지 알 수 없습니다. 라인 (42)에단편과 주 활동 사이의 통신

01-19 16:15:01.838 6105-6105/com.example.torresj.unlockdemo E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.NullPointerException 
      at com.example.torresj.unlockdemo.HomeFragment$1.onClick(HomeFragment.java:42) 
      at android.view.View.performClick(View.java:4475) 
      at android.view.View$PerformClick.run(View.java:18786) 
      at android.os.Handler.handleCallback(Handler.java:730) 
      at android.os.Handler.dispatchMessage(Handler.java:92) 
      at android.os.Looper.loop(Looper.java:176) 
      at android.app.ActivityThread.main(ActivityThread.java:5419) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:525) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
      at dalvik.system.NativeStart.main(Native Method) 

내 조각 클래스의 someEventListener.someEvent(final_str);이다 : 나는 다음과 같은 오류가 계속. 소스는 다음과 같습니다 :

public class HomeFragment extends Fragment { 

    public interface onSomeEventListener { 
     public void someEvent(String s); 
    } 
    onSomeEventListener someEventListener; 

    public HomeFragment() {} 
    View rootView; 


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

     rootView = inflater.inflate(R.layout.fragment_home, container, false); 
     Button Send = (Button) rootView.findViewById(R.id.sendbtn); 

     final EditText Username = (EditText) rootView.findViewById(R.id.editText); 
     final EditText Password = (EditText) rootView.findViewById(R.id.editText2); 

     Send.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String s = Username.getText().toString(); 
       String s2 = Password.getText().toString(); 
       String final_str = s + ":" + s2; 

       someEventListener.someEvent(final_str); 
      } 
     }); 

     return rootView; 
    } 

} 
으로 나는 또한 내 주요 활동을 선언 한

:

@Override 
    public void someEvent(String s) { 
     String y = s; 
     Log.i("Frag", s); 
    } 

내가 아니다 :

내 주요 활동의 바닥에서
public class MainActivity extends ActionBarActivity implements HomeFragment.onSomeEventListener 

는 FF 기능입니다 왜 정확하게 오류가 생성되었는지 확인하십시오. 내 조각 클래스에서 someEventListener.someEvent(final_str); 호출이 발생하기 전에 문자열이 정확합니다.

답변

1

조각에 리스너를 설정해야합니다. 이 코드를 HomeFragment에 추가하십시오.

@Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      someEventListener = (OnSomeEventListener) activity; 
     } catch (ClassCastException e) { 
      throw new IllegalArgumentException("Activity must implement HomeFragment.OnSomeEventListener!"); 
     } 
    } 

은 또한 유진 Pechanec 의해 제안 잠재적 메모리 누설을 방지 할 onDetach에서 참조를 클리어.

@Override 
public void onDetach() { 
    super.onDetach(); 
    someEventListener = null; 
} 
+0

더미 콜백으로 'onDetach'를 추가하십시오. –