【发布时间】:2017-11-03 06:42:34
【问题描述】:
我是 android 新手,对从片段获取数据到 Activity 没有太多知识。我有一个活动和三个名为 loginFragment、signUpFragment 和 homeFragment 的片段。 我想做一些事情,比如当我在这个应用程序中注册(在 signUpFragment 中)然后使用注册详细信息登录并进一步转到 homeFrament 和 HomeFragment 有一个注销按钮,用于清除共享的首选项数据并再次发送回登录屏幕。 当应用程序以 loginFragment 开头时打开,如果我不注销,则应用程序以 HomeFragment 开头。
我在使用 Sharedpreference 从活动中的片段获取数据时总是出错。
我在活动中获取共享偏好值的代码:
SharedPreferences preferences = getApplicationContext().getSharedPreferences("pref",MODE_PRIVATE);
final String email = preferences.getString("email", "Empty");
final String password = preferences.getString("password", "Empty");
final LoginFragment login = new LoginFragment();
final HomeFragment home = new HomeFragment();
if (email == "Empty" && password == "Empty" ) {
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, login).commit();
}else {
getFragmentManager().beginTransaction()
.add(R.id.fragment_container, home).commit();
}
startActivity(new Intent(Splash.this,MainActivity.class));
finish();
我使用 sharedprefrence 将数据放入片段中的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_sign_up, container, false);
final EditText et_username = view.findViewById(R.id.et_username);
final EditText et_remail = view.findViewById(R.id.et_remail);
final EditText et_rpass = view.findViewById(R.id.et_rpass);
final EditText et_rcpass = view.findViewById(R.id.et_rcpass);
final EditText et_phone = view.findViewById(R.id.et_phone);
preference = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
editor = preference.edit();
view.findViewById(R.id.bt_rsignup).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (LoginFragment.isEmpty(et_username)){
et_username.setError("Enter user name");
et_username.requestFocus();
} else if (LoginFragment.isEmpty(et_remail)) {
et_remail.setError("Enter email address");
et_remail.requestFocus();
} else if (!isEmailValid(et_remail.getText().toString().trim())) {
et_remail.setError("Enter valid email address");
et_remail.requestFocus();
} else if (LoginFragment.isEmpty(et_rpass)){
et_rpass.setError("Enter password");
et_rpass.requestFocus();
} else if (LoginFragment.isEmpty(et_rcpass)) {
et_rcpass.setError("Repeat password be confirmed");
et_rcpass.requestFocus();
} else if (!et_rpass.getText().toString().trim().equals(et_rcpass.getText().toString().trim())) {
et_rcpass.setError("Password mismatch");
et_rcpass.requestFocus();
} else if (LoginFragment.isEmpty(et_phone)){
et_phone.setError("Enter phone number");
et_phone.requestFocus();
} else {
editor.putString("user_name",et_username.getText().toString());
editor.putString("email",et_remail.getText().toString().trim());
editor.putString("password",et_rpass.getText().toString().trim());
editor.putString("cpassword",et_rcpass.getText().toString().trim());
editor.putString("phone",et_phone.getText().toString().trim());
editor.commit();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
LoginFragment loginFragment = new LoginFragment();
fragmentTransaction.add(R.id.fragment_container, loginFragment);
fragmentTransaction.commit();
}
}
});
return view;
我在 logcat 中收到此错误:
java.lang.IllegalArgumentException: No view found for id 0x7f0b005e (com.danish.test3:id/fragment_container) for fragment LoginFragment{52802074 #0 id=0x7f0b005e}
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:882)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:684)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
-
它会给出未找到视图的错误。威胁您有不在您的布局中的参考视图 ID 检查您的布局。如果你添加布局那么更好理解。
-
检查你的活动布局 R.id.fragment_container 是否存在
-
我检查了我的布局没有任何问题,在活动主布局中我创建了一个框架布局并用片段_container命名。它适用于其他片段及其布局,但不适用于活动。
标签: java android android-fragments android-activity sharedpreferences