基于导航视图的片段回收器视图上的空对象引用



我试图实现一个包含RecyclerView的片段。到目前为止,我使用空片段工作测试代码没有问题。但是当我尝试实现回收器视图时,它总是使活动崩溃MainMenu

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View androidx.recyclerview.widget.RecyclerView.findViewById(int)' on a null object at ugm.fznzz.findmycoffee.Fragment.HomeFragment.onCreateView(HomeFragment.java:42)' on a null object reference

这是第 42 行错误说的片段上的代码,但我不知道那一行有什么问题,因为我正确地将其引用到 xml 中的 RecyclerView 对象 ID。

private RecyclerView recyclerView;
private RecyclerViewAdapter adapter;
private RecyclerView.LayoutManager layoutManager;
List<ItemMenu> listData;
FirebaseDatabase FDB;
DatabaseReference DBR;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home, container, false);
recyclerView = recyclerView.findViewById(R.id.menuItem);  //this is line 42
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
listData = new ArrayList<>();
adapter = new RecyclerViewAdapter(listData);
FDB = FirebaseDatabase.getInstance();
GetDataFirebase();
return v;
}

对象菜单项是这样的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/grad1"
tools:context="ugm.fznzz.findmycoffee.Fragment.HomeFragment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/menuItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:paddingTop="20dp"
android:paddingBottom="30dp"
/>
</RelativeLayout>

这也是活动

private DrawerLayout drawer;
ActionBarDrawerToggle toggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
if (savedInstanceState == null) {
MenuItem item =  navigationView.getMenu().getItem(0);
onNavigationItemSelected(item);
}
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.nav_home: {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();
menuItem.setChecked(true);
break;
}
case R.id.nav_sort: {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SortFragment()).commit();
menuItem.setChecked(true);
break;
}
case R.id.nav_settings: {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SettingsFragment()).commit();
menuItem.setChecked(true);
break;
}
case R.id.nav_login: {
Intent login = new Intent(MainMenu.this, Login.class);
startActivity(login);
break;
}
case R.id.nav_signup:
Intent sign_up = new Intent(MainMenu.this, SignUp.class);
startActivity(sign_up);
break;
}
drawer.closeDrawer(GravityCompat.START);
return false;
}
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}

您正在尝试引用recyclerView中的recylerView。您需要使用片段的根视图,即v

recyclerView = recyclerView.findViewById(R.id.menuItem); 

应该是

recyclerView = v.findViewById(R.id.menuItem); 

相关内容

最新更新