2016-03-05 57 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;

作为一般规则,尝试使用支持库中的组件,而不是框架中的组件,因为支持组件会更快地修复错误。我没有证据支持这种说法,只有我的日常经验:)。