【发布时间】:2016-06-13 21:30:27
【问题描述】:
如果我的英语不完美,我很抱歉。
自 2 周以来我正在学习 Java 和 Android Studio,我正在尝试添加滑动选项卡,并在选项卡内添加一个 RecyclerView,其中 CardViews 作为具有名称和图片的行项。 我的滑动标签有效,我可以在标签中放置一个卡片视图,带有图片和名称。但是当我使用 RecyclerView 时,它不起作用并且出现错误。从昨天开始我就无法解决这个问题。
这是我的程序。
我的班级人
public class Person {
String name;
int photoId;
public Person(String name, int photoId) {
this.name = name;
this.photoId = photoId;
}
private List<Person> persons;
private void initializeData(){
persons = new ArrayList<>();
persons.add(new Person("Benjamin", R.drawable.team));
persons.add(new Person("Thomas", R.drawable.haltere));
}
//GETTER
public String getName() {
return this.name;
}
public int getPhoto() {
return this.photoId;
}
我的班级适配器
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder>{
public static class PersonViewHolder extends RecyclerView.ViewHolder {
CardView cv;
TextView personName;
ImageView personPhoto;
PersonViewHolder(View itemView) {
super(itemView);
cv = (CardView)itemView.findViewById(R.id.cardView);
personName = (TextView)itemView.findViewById(R.id.cardTitle);
personPhoto = (ImageView)itemView.findViewById(R.id.cardPhoto);
}
}
List<Person> persons;
public RVAdapter(List<Person> persons){
this.persons = persons;
}
@Override
public int getItemCount() {
return persons.size();
}
@Override
public PersonViewHolder onCreateViewHolder (ViewGroup viewGroup, int viewType) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview, viewGroup, false);
return new PersonViewHolder(v);
}
@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
personViewHolder.personName.setText(persons.get(i).name);
personViewHolder.personPhoto.setImageResource(persons.get(i).photoId);
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
我的活动
public class ActivityHome extends AppCompatActivity {
// Declaring Your View and Variables
Toolbar toolbar;
ViewPager pager;
ViewPagerAdapter adapter;
SlidingTabLayout tabs;
CharSequence Titles[]={"1","2","3","4"};
int Numboftabs =4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
RecyclerView rv = (RecyclerView)findViewById(R.id.my_recycler_view);
ArrayList<Person> persons = new ArrayList<>();
RVAdapter rAdapter = new RVAdapter(persons);
rv.setAdapter(rAdapter);
rv.setLayoutManager(layoutManager);
}
(后面有一些代码,但它只用于滑动标签,并且有效。)
我的 recycler_view.xml
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/my_recycler_view"
xmlns:android="http://schemas.android.com/apk/res/android" />
我的activity_home.xml
<LinearLayout
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:orientation="vertical"
tools:context=".MainActivity">
<include
android:id="@+id/tool_bar"
layout="@layout/tool_bar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
/>
<Tab.SlidingTabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="2dp"
android:background="@color/colorPrimary" />
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_weight="1"
></android.support.v4.view.ViewPager>
还有我的 cardview.xml
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardView"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
app:cardBackgroundColor="#ffffff"
app:cardCornerRadius="5dp"
app:cardElevation="7dp">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ActivityHome"
android:background="#ffffff">
<TextView
android:id="@+id/cardTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:text="Card Title"
android:textColor="#000000"
android:textSize="17sp" />
<ImageView
android:id="@+id/cardPhoto"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginTop="50dp"
android:src="@drawable/haltere"
android:scaleType="center"
/>
</RelativeLayout>
我的错误:
Process: com.android.frutii.fitness5, PID:640 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.frutii.fitness5/com.android.frutii.fitness5.ActivityHome}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setAdapter(android.support.v7.widget.RecyclerView$Adapter)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2464)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2526)
at android.app.ActivityThread.access$800(ActivityThread.java:169)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5549)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setAdapter(android.support.v7.widget.RecyclerView$Adapter)' on a null object reference
at com.android.frutii.fitness5.ActivityHome.onCreate(ActivityHome.java:45)
at android.app.Activity.performCreate(Activity.java:5975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2526)
at android.app.ActivityThread.access$800(ActivityThread.java:169)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5549)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
我在互联网上阅读了很多答案,但无法摆脱这个错误。
【问题讨论】:
-
请发布您的 R.layout.activity_home
-
你的
R.layout.activity_home有R.id.my_recycler_view吗? -
变量
rv为空。也许您的布局 xmlR.layout.activity_home中没有 ID 为R.id.my_recycler_view的 RecyclerView?
标签: java android android-studio android-recyclerview android-cardview