Java 如何通过适配器访问片段元素?

Java 如何通过适配器访问片段元素?,java,android,android-fragments,android-activity,Java,Android,Android Fragments,Android Activity,我有LoginActivity.class,它在onCreate()上使用适配器 LoginAdapter.class public class LoginAdapter extends FragmentPagerAdapter { private Context context; int totalTabs; public LoginAdapter(@NonNull FragmentManager fm,Context context, int totalTabs) { super

我有LoginActivity.class,它在onCreate()上使用适配器

LoginAdapter.class

public class LoginAdapter extends FragmentPagerAdapter {

private Context context;
int totalTabs;

public LoginAdapter(@NonNull FragmentManager fm,Context context, int totalTabs) {
    super(fm);
    this.context = context;
    this.totalTabs = totalTabs;
}

@Override
public int getCount() {
    return totalTabs;
}

public Fragment getItem(int position){

    switch (position){
        case 0:
            LoginTabFragment loginTabFragment = new LoginTabFragment();
            return loginTabFragment;
        case 1:
            RegisterTabFragment registerTabFragment = new RegisterTabFragment();
            return registerTabFragment;
        default:
            return null;
    }}}
LoginTabFragment.class

public class LoginTabFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.login_tab_fragment, container, false);
    return root;
}}
LoginActivity需要访问login_tab_fragment.xml中的字段

userNameInput=findviewbyd(R.id.login\u username\u input);
passwordInput=findViewById(R.id.login\u password\u input);
loginBtn=FindView wByd(R.id.login_uemail_ulogin_uBTN);
loginBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
}
});
我得到了NPE:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.Button.setOnClickListener(android.view.view$OnClickListener)”
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)上

如何在LoginActivity中访问LoginTabFragment元素?谢谢。

您可以在活动中定义可以调用的公共方法

  • 在活动中定义此方法

    public void responseFromFragment(View v){
    //do your things in activity
    }
    
  • 从片段调用方法

    loginBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    ((YourActivityClassName)getActivity()).responseFromFragment(v);
    }
    
  • 我不建议你这样做
    你可以在Fragment中做任何事情,你不需要将ref传递给activity,请了解有关Fragment的更多信息

    我认为你的问题可能只是在调用
    loginBtn=findViewById(R.id.login\u email\u login\u btn)时找不到你的按钮因此为
    null
    。虽然这可能是错误的,但这仅仅是简单的一瞥。他在活动中调用片段视图
    loginBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    ((YourActivityClassName)getActivity()).responseFromFragment(v);
    }