gpt4 book ai didi

java - 从 Activity 移至 Fragment 的代码中的引用不再解析

转载 作者:行者123 更新时间:2023-12-02 03:38:19 29 4
gpt4 key购买 nike

我是 Android/Java 新手,所以请耐心等待。

我从 LoginActivity > onCreate 移动了代码进入我创建的 fragment 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 ...

}
}

当第二个代码块驻留在 onCreate 中时正在工作的变量/方法Activity 的方法,但在我将代码移至 onCreateView 后不再解析FragmentLogin的 fragment 类:

findViewById , setContentView

基本上,这是一个登录表单,默认 fragment 应该是 login ,该页面上的按钮 ( Button forgottenPassword ) 将打开另一个 fragment ( FragmentForgottenPassword )。

谁能告诉我我做错了什么?

最佳答案

在您的 Activity 布局 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 中:删除 fragment 管理器内容。您还不需要它。

public class LoginActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.fragment_login);
}
}

在 FragmentLogin 中,将 return 语句移至末尾,并使用膨胀 View 按 id 查找 View :

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com