我在使用Android / Java时还很新,所以请多多包涵。
我将代码从LoginActivity > onCreate
移到我创建FragmentLogin
的片段中,并将其移至方法onCreate
中,其中不再解析许多类,例如findViewById
。我假设某个地方我没有正确传递容器Activity的上下文。
或其他一些新手错误...
这是LoginActivity.java [复制了相关部分]
public class LoginActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initialize Fragments //
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
setContentView(R.layout.fragment_login);
}
}
和FragmentLogin.java:
public class FragmentLogin extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_login, container, false);
final ValidationManager Check = new ValidationManager();
final SessionManager Session = new SessionManager(this);
final EditText textEmail = (EditText) findViewById(R.id.login_email);
final EditText textPassword = (EditText) findViewById(R.id.login_pass);
final Button buttonLogIn = (Button) findViewById(R.id.button_login);
final Button buttonSignup = (Button) findViewById(R.id.button_signup);
// Listen for FORGOTTEN PASSWORD click event, open ForgottenPassword Fragment //
final Button forgottenPassword = (Button) findViewById(R.id.button_lost_pass);
forgottenPassword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setContentView(R.layout.fragment_forgotten_password);
}
});
... more code ...
}
}
当第二个代码块驻留在Activity的
onCreate
方法中时起作用的变量/方法,但是在我将代码移到onCreateView
片段类的FragmentLogin
之后不再解析:findViewById
,setContentView
基本上,这是一个登录表单,其中默认片段应为
login
,并且该页面上的按钮(Button forgottenPassword
)将打开另一个片段(FragmentForgottenPassword
)。谁能告诉我我在做什么错?
最佳答案
在您的活动布局xml文件中,添加类似以下内容:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment android:name="your.package.FragmentLogin"
android:id="@+id/fragment_login"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
在您的LoginActivity中:删除片段管理器中的内容。您还不需要它。
public class LoginActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_login);
}
}
在您的FragmentLogin中,将return语句移到末尾,然后使用展开视图通过id查找您的视图:
public class FragmentLogin extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final view view = inflater.inflate(R.layout.fragment_login, container, false);
final ValidationManager Check = new ValidationManager();
final SessionManager Session = new SessionManager(this);
final EditText textEmail = (EditText) view.findViewById(R.id.login_email);
final EditText textPassword = (EditText) view.findViewById(R.id.login_pass);
final Button buttonLogIn = (Button) view.findViewById(R.id.button_login);
final Button buttonSignup = (Button) view.findViewById(R.id.button_signup);
// Listen for FORGOTTEN PASSWORD click event, open ForgottenPassword Fragment //
final Button forgottenPassword = (Button) view.findViewById(R.id.button_lost_pass);
forgottenPassword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setContentView(R.layout.fragment_forgotten_password);
}
});
... more code ...
return view;
}
}
关于java - 从“Activity ”移到“fragment ”的代码中的引用不再解析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37161684/