Android RecyclerView inside CardView inside RecyclerView在findViewById上抛出空指针
我正在尝试创建一个RecyclerView,其中每一行都是一个CardLayout,它同样包含一个RecyclerView(带有页眉、项目和页脚)。我尝试从OuterRecyclerView实例化OnBind中的innerRecyclerView,但一直得到一个空指针Android RecyclerView inside CardView inside RecyclerView在findViewById上抛出空指针,android,android-recyclerview,android-cardview,Android,Android Recyclerview,Android Cardview,我正在尝试创建一个RecyclerView,其中每一行都是一个CardLayout,它同样包含一个RecyclerView(带有页眉、项目和页脚)。我尝试从OuterRecyclerView实例化OnBind中的innerRecyclerView,但一直得到一个空指针 <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height=
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_weekplan_inner_recyclerview"
/>
</android.support.v7.widget.CardView>
“主要”活动代码:
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
import com.squareup.timessquare.CalendarPickerView;
import java.util.List;
import ch.zhaw.it15a_zh.psit3_03.mealmanager.R;
import ch.zhaw.it15a_zh.psit3_03.mealmanager.adapters.OuterWeekplanAdapter;
import ch.zhaw.it15a_zh.psit3_03.mealmanager.db.repos.UserPlannedRecipesRepo;
import ch.zhaw.it15a_zh.psit3_03.mealmanager.models.UserPlannedRecipe;
public class WeekPlanActivity extends AppCompatActivity {
private RecyclerView outerRecyclerView;
private CalendarPickerView calendar;
private UserPlannedRecipesRepo uprr = new UserPlannedRecipesRepo();
private List<UserPlannedRecipe> userPlannedRecipeList;
private List<String> distinctUserPlannedDates;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Hide Top Toolbar form android device
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//Set LayoutFile
setContentView(R.layout.activity_weekplan);
/* BEGIN TOOLBAR */
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_weekplan_overview);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(R.string.toolbar_title_weekplan_activity);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
/* END TOOLBAR */
outerRecyclerView = (RecyclerView) findViewById(R.id.activity_weekplan_outer_recyclerview);
distinctUserPlannedDates = uprr.getDistinctListOfPlannedDates();
OuterWeekplanAdapter outerWeekplanAdapter =
new OuterWeekplanAdapter(getApplicationContext(), distinctUserPlannedDates);
RecyclerView.LayoutManager manager = new LinearLayoutManager(getApplicationContext());
outerRecyclerView.setLayoutManager(manager);
outerRecyclerView.setItemAnimator(new DefaultItemAnimator());
outerRecyclerView.setAdapter(outerWeekplanAdapter);
}
//Inflate Options Menu to show additional buttons in toolbar
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_weekplan_main_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.ic_action_weekplan_add:
Intent intent = new Intent(this, DateRangePicker.class);
Context context = this;
context.startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
}
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_weekplan_inner_recyclerview"
/>
</android.support.v7.widget.CardView>
“主要”活动布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".activities.WeekPlanActivity">
<include
layout="@layout/toolbar_weekplan_overview"
android:id="@+id/toolbar_weekplan_overview"/>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_weekplan_outer_recyclerview"
android:layout_below="@id/toolbar_weekplan_overview"
/>
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_weekplan_inner_recyclerview"
/>
</android.support.v7.widget.CardView>
看起来您使用了错误的视图从调用
findViewById()
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_weekplan_inner_recyclerview"
/>
</android.support.v7.widget.CardView>
innerRecyclerView = (RecyclerView) holder.findViewById(R.id.activity_weekplan_inner_recyclerview);
而不是
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_weekplan_inner_recyclerview"
/>
</android.support.v7.widget.CardView>
innerRecyclerView = (RecyclerView) innerRecyclerView.findViewById(R.id.activity_weekplan_inner_recyclerview);
看起来您使用了错误的视图从调用
findViewById()
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_weekplan_inner_recyclerview"
/>
</android.support.v7.widget.CardView>
innerRecyclerView = (RecyclerView) holder.findViewById(R.id.activity_weekplan_inner_recyclerview);
而不是
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_weekplan_inner_recyclerview"
/>
</android.support.v7.widget.CardView>
innerRecyclerView = (RecyclerView) innerRecyclerView.findViewById(R.id.activity_weekplan_inner_recyclerview);
在您的OuterWeekPlanView中,外部RecyclerView适配器的支架
加上这个
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_weekplan_inner_recyclerview"
/>
</android.support.v7.widget.CardView>
然后像这样在OnBindViewHolder中使用它 <android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_weekplan_inner_recyclerview"
/>
</android.support.v7.widget.CardView>
holder.innerRecyclerView.setLayoutManager(manager);
holder.innerRecyclerView.setAdapter(adapter);
在您的OuterWeekPlanView中,外部RecyclerView适配器的支架
加上这个
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_weekplan_inner_recyclerview"
/>
</android.support.v7.widget.CardView>
然后像这样在OnBindViewHolder中使用它 <android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_weekplan_inner_recyclerview"
/>
</android.support.v7.widget.CardView>
holder.innerRecyclerView.setLayoutManager(manager);
holder.innerRecyclerView.setAdapter(adapter);
天哪,我是个白痴。我忘了在OuterWeekplanViewHolder中实例化内部回收视图。我现在得到不同的错误,但它们与此错误无关。谢谢你的帮助!天哪,我是个白痴。我忘了在OuterWeekplanViewHolder中实例化内部回收视图。我现在得到不同的错误,但它们与此错误无关。谢谢你的帮助!是的,就是这样。我无法理解我是如何错过的。也许我盯着它看太久了。谢谢你的帮助!错误是不可避免的!!是的,就是这样。我无法理解我是如何错过的。也许我盯着它看太久了。谢谢你的帮助!错误是不可避免的!!