【问题标题】:How to access fragment elements via adapter?如何通过适配器访问片段元素?
【发布时间】:2021-02-21 13:56:07
【问题描述】:

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

final LoginAdapter loginAdapter = new LoginAdapter(getSupportFragmentManager(), this, tabLayout.getTabCount());
    viewPager.setAdapter(loginAdapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

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 = findViewById(R.id.login_username_input);
passwordInput = findViewById(R.id.login_password_input);
loginBtn = findViewById(R.id.login_email_login_btn);
loginBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

    }
});

我得到 NPE:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)

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

【问题讨论】:

  • 我认为您的问题可能只是在调用loginBtn = findViewById(R.id.login_email_login_btn); 时找不到您的按钮,因此是null。虽然可能是错误的,这只是快速浏览。
  • 他在活动中调用片段视图

标签: java android android-fragments android-activity


【解决方案1】:

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

  1. 在你的活动中定义这个方法

    public void responseFromFragment(View v){
    //do your things in activity
    }
    
  2. 从 Fragment 调用方法

    loginBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    ((YourActivityClassName)getActivity()).responseFromFragment(v);
    }
    

我不建议你这样做 您可以在 Fragment 中执行所有操作,而无需将 ref 传递给活动请了解有关 Fragment 的更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-13
    • 2022-01-08
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2017-05-10
    • 2013-10-28
    • 2017-05-11
    相关资源
    最近更新 更多