2016-03-05 58 views
1

我有一個要求輸入電子郵件和密碼的片段。我想將電子郵件轉移到活動中。將數據從片段傳輸到活動 - 繼續獲取空對象返回

我想從片段中傳遞etCbMail的文本,然後返回到活動。我不斷收到空對象,我不知道如何返回到活動。

這是我的片段:

public class RegFragOne extends Fragment { 

EditText etCbMail, etCbPassword, etCbVerifyPassword; 
Button btnCbContinueToTwo; 
OnDataPass dataPasser; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.reg_one, container, false); 

    etCbMail = (EditText) view.findViewById(R.id.etEMail); 
    etCbPassword = (EditText) view.findViewById(R.id.etPassword); 
    etCbVerifyPassword = (EditText) view.findViewById(R.id.etVerifyPassword); 
    btnCbContinueToTwo = (Button) view.findViewById(R.id.btnContinueToTwo); 

    btnCbContinueToTwo.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      dataPasser.onDataPass(etCbMail.getText().toString()); 
     } 
    }); 
    return view; 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    try { 
     dataPasser = (OnDataPass) context; 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

public interface OnDataPass { 
    public void onDataPass(String data); 
} 
} 

這是我的活動:

public class RegistationActivity extends Activity implements RegFragOne.OnDataPass{ 
Fragment fragment; 
FragmentTransaction fragmentTransaction; 
String passedData; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.reg_fragment); 

    fragment = new RegFragOne(); 
    fragmentTransaction = getFragmentManager().beginTransaction().add(R.id.frgContainer, fragment); 
    fragmentTransaction.commit(); 


} 

@Override 
public void onDataPass(String data) { 
    passedData = data; 
} 
} 

,這是我的日誌:

03-05 15:15:32.871 4043-4043/? E/AndroidRuntime: FATAL EXCEPTION: main 
              Process: com.example.shaka.myparselogin, PID: 4043 
              java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.shaka.myparselogin.RegistrationFragments.RegFragOne$OnDataPass.onDataPass(java.lang.String)' on a null object reference 
               at com.example.shaka.myparselogin.RegistrationFragments.RegFragOne$1.onClick(RegFragOne.java:39) 
               at android.view.View.performClick(View.java:4756) 
               at android.view.View$PerformClick.run(View.java:19749) 
               at android.os.Handler.handleCallback(Handler.java:739) 
               at android.os.Handler.dispatchMessage(Handler.java:95) 
               at android.os.Looper.loop(Looper.java:135) 
               at android.app.ActivityThread.main(ActivityThread.java:5221) 
               at java.lang.reflect.Method.invoke(Native Method) 
               at java.lang.reflect.Method.invoke(Method.java:372) 
               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

可以請你幫我2個問題?

+0

你的目標api數是多少? –

+0

機器人{ compileSdkVersion 23 buildToolsVersion 「23.0.2」 defaultConfig { 的applicationID 「com.example.shaka.myparselogin」 的minSdkVersion 15 targetSdkVersion 23 的versionCode 1 的versionName 「1.0」 –

+0

是否使用天然片段或支持庫中的一些? –

回答

2

getSupportFragmentManager()代替getFragmentManager()...
這將迫使您使用支持庫中的組件(Fragment,AppCompatActivity),並將您的導入從import android.app.Fragment;更改爲import android.support.v4.app.Fragment;

作爲一般規則,嘗試使用支持庫中的組件,而不是框架中的組件,因爲支持組件會更快地修復錯誤。我沒有證據支持這種說法,只有我的日常經驗:)。