选项卡布局中的回收视图
recyclerview in tab layout
我目前正在使用标签页布局中的 recyclerview。
我收到一个错误
尝试在空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)'
谁能告诉我哪里错了
listcontent.java 文件
package com.example.a1407268.learn12;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
public class Listcontent extends Fragment {
private RecyclerView.Adapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
RecyclerView recyclerview = (RecyclerView)
inflater.inflate(R.layout.recycler_view, container, false);
adapter = new MyAdapter(getContext());
recyclerview.setAdapter(adapter);
recyclerview.setHasFixedSize(true);
recyclerview.setLayoutManager(new LinearLayoutManager(getActivity()));
return recyclerview;
}
}
class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyrecyclerViewHolder>{
final int LENGTH=18;
String[] place;
String[] des;
Drawable[] pic;
public MyAdapter(Context context) {
Resources r = context.getResources();
place = r.getStringArray(R.array.places);
des = r.getStringArray(R.array.place_desc);
TypedArray a = r.obtainTypedArray(R.array.place_avator);
pic = new Drawable[a.length()];
for (int i = 0; i < pic.length; i++) {
pic[i] = a.getDrawable(i);
}
a.recycle();
}
@Override
public MyrecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v
=LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tile,
parent,false);
MyrecyclerViewHolder recyclerview = new MyrecyclerViewHolder(v);
return recyclerview;
}
@Override
public void onBindViewHolder(MyrecyclerViewHolder holder, int position) {
holder.tx_des.setText(des[position]);
holder.tx_title.setText(place[position]);
holder.img.setImageDrawable(pic[position]);
}
@Override
public int getItemCount() {
return LENGTH;
}
public class MyrecyclerViewHolder extends RecyclerView.ViewHolder {
ImageView img;
TextView tx_des, tx_title;
public MyrecyclerViewHolder(View view) {
super(view);
img = (ImageView) view.findViewById(R.id.image_view);
tx_des = (TextView) view.findViewById(R.id.discription);
tx_title = (TextView) view.findViewById(R.id.tittle);
}
}
}
item_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="60dp">
<android.support.v7.widget.CardView
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/card_view"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/image_view"
android:src="@drawable/a_avator"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tittle"
android:text="@string/item_title"
android:textStyle="bold"
android:textAppearance="?android:textAppearanceLarge"
android:layout_toRightOf="@+id/image_view"
/>
<TextView
android:id="@+id/discription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tittle"
android:layout_toRightOf="@+id/image_view"
android:textAppearance="?attr/textAppearanceListItem"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
array.xml
<resources>
<string-array name="places">
<item>Palais Garnie</item>
<item>Piazza del Duomo</item>
<item>Manhattan</item>
<item>Senso-ji</item>
<item>Sultan Ahmed Mosque</item>
<item>Table Mountain</item>
</string-array>
<string-array name="place_desc">
<item>The Palais Garnier which locates in Paris was built from 1861 for
the Paris Opera.
</item>
<item>Piazza del Duomo the cathedral which locates in Florence.</item>
<item>Manhattan is the district in New York City</item>
<item>Senso-ji is the Shrine locates in Asakusa Tokyo</item>
<item>Sultan Ahmed Mosque is mosque locates in Istabul, Turkey</item>
<item>Table Mountain is mountain and park locates in Cape Town, South `
Africa.</item>
</string-array>
<string-array name="place_details">
<item>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo ` ` `consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu ` ` fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa ` `qui officia
deserunt mollit anim id est laborum.
</item>
<item>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad ` ` `minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo ` ` `consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu ` fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa ` `qui officia
deserunt mollit anim id est laborum.
</item>
<item>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad ` `minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo ` ` `consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu ` `fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa ` `qui officia
deserunt mollit anim id est laborum.
</item>
<item>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ` ` `minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo ` ` `consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu ` ` `fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in cu` ` `qui officia
deserunt mollit anim id est laborum.
</item>
<item>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.
</item>
<item>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.
</item>
</string-array>
<string-array name="place_locations">
<item>8 Rue Scribe, 75009 Paris, France</item>
<item>Piazza del Capitolo - 50122 Florence</item>
<item>New York City</item>
<item>2-3-1 Asakusa, Taitō-ku, Tokyo, Japan</item>
<item>At Meydanı No:7, 34122 Fatih/İstanbul, Turkey</item>
<item>Cape Town, South Africa</item>
</string-array>
<array name="place_avator">
<item>@drawable/a_avator</item>
<item>@drawable/b_avator</item>
<item>@drawable/c_avator</item>
<item>@drawable/d_avator</item>
<item>@drawable/e_avator</item>
<item>@drawable/f_avator</item>
</array>
</resources>
strings.xml
<resources>
<string name="app_name">Learn12</string>
<string name="action_settings">Settings</string>
<string name="item_title">Palais Garnier</string>
<string name="item_desc">The Palais Garnier which locates in Paris was built
</string>
<string name="detail_desc">Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed doeiusmod tempor incididunt ut labore et dolore magna ` `aliqua. Ut enim ad minim veniam, quisnostrud exercitation ullamco laboris ` `nisi ut aliquip ex ea commodo consequat. Duis auteirure dolor in ` ` `` `reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla ` ` `pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa ` `qui officia
deserunt mollit anim id est laborum.
</string>
<string name="detail_location">"8 Rue Scribe, 75009 Paris, France"` ` `</string>
</resources>
Recycler_view.xml
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:scrollbars="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
您正在膨胀错误的布局 item_tile.xml
而不是 item_list.xml
来创建 ViewHolder 视图。
改变这个
@Override
public MyrecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tile, parent, false);
MyrecyclerViewHolder recyclerview = new MyrecyclerViewHolder(v);
return recyclerview;
}
到
@Override
public MyrecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent,false);
MyrecyclerViewHolder recyclerview = new MyrecyclerViewHolder(v);
return recyclerview;
}
我目前正在使用标签页布局中的 recyclerview。 我收到一个错误
尝试在空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)' 谁能告诉我哪里错了
listcontent.java 文件
package com.example.a1407268.learn12;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
public class Listcontent extends Fragment {
private RecyclerView.Adapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
RecyclerView recyclerview = (RecyclerView)
inflater.inflate(R.layout.recycler_view, container, false);
adapter = new MyAdapter(getContext());
recyclerview.setAdapter(adapter);
recyclerview.setHasFixedSize(true);
recyclerview.setLayoutManager(new LinearLayoutManager(getActivity()));
return recyclerview;
}
}
class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyrecyclerViewHolder>{
final int LENGTH=18;
String[] place;
String[] des;
Drawable[] pic;
public MyAdapter(Context context) {
Resources r = context.getResources();
place = r.getStringArray(R.array.places);
des = r.getStringArray(R.array.place_desc);
TypedArray a = r.obtainTypedArray(R.array.place_avator);
pic = new Drawable[a.length()];
for (int i = 0; i < pic.length; i++) {
pic[i] = a.getDrawable(i);
}
a.recycle();
}
@Override
public MyrecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v
=LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tile,
parent,false);
MyrecyclerViewHolder recyclerview = new MyrecyclerViewHolder(v);
return recyclerview;
}
@Override
public void onBindViewHolder(MyrecyclerViewHolder holder, int position) {
holder.tx_des.setText(des[position]);
holder.tx_title.setText(place[position]);
holder.img.setImageDrawable(pic[position]);
}
@Override
public int getItemCount() {
return LENGTH;
}
public class MyrecyclerViewHolder extends RecyclerView.ViewHolder {
ImageView img;
TextView tx_des, tx_title;
public MyrecyclerViewHolder(View view) {
super(view);
img = (ImageView) view.findViewById(R.id.image_view);
tx_des = (TextView) view.findViewById(R.id.discription);
tx_title = (TextView) view.findViewById(R.id.tittle);
}
}
}
item_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="60dp">
<android.support.v7.widget.CardView
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/card_view"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/image_view"
android:src="@drawable/a_avator"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tittle"
android:text="@string/item_title"
android:textStyle="bold"
android:textAppearance="?android:textAppearanceLarge"
android:layout_toRightOf="@+id/image_view"
/>
<TextView
android:id="@+id/discription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tittle"
android:layout_toRightOf="@+id/image_view"
android:textAppearance="?attr/textAppearanceListItem"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
array.xml
<resources>
<string-array name="places">
<item>Palais Garnie</item>
<item>Piazza del Duomo</item>
<item>Manhattan</item>
<item>Senso-ji</item>
<item>Sultan Ahmed Mosque</item>
<item>Table Mountain</item>
</string-array>
<string-array name="place_desc">
<item>The Palais Garnier which locates in Paris was built from 1861 for
the Paris Opera.
</item>
<item>Piazza del Duomo the cathedral which locates in Florence.</item>
<item>Manhattan is the district in New York City</item>
<item>Senso-ji is the Shrine locates in Asakusa Tokyo</item>
<item>Sultan Ahmed Mosque is mosque locates in Istabul, Turkey</item>
<item>Table Mountain is mountain and park locates in Cape Town, South `
Africa.</item>
</string-array>
<string-array name="place_details">
<item>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo ` ` `consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu ` ` fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa ` `qui officia
deserunt mollit anim id est laborum.
</item>
<item>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad ` ` `minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo ` ` `consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu ` fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa ` `qui officia
deserunt mollit anim id est laborum.
</item>
<item>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad ` `minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo ` ` `consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu ` `fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa ` `qui officia
deserunt mollit anim id est laborum.
</item>
<item>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ` ` `minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo ` ` `consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu ` ` `fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in cu` ` `qui officia
deserunt mollit anim id est laborum.
</item>
<item>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.
</item>
<item>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.
</item>
</string-array>
<string-array name="place_locations">
<item>8 Rue Scribe, 75009 Paris, France</item>
<item>Piazza del Capitolo - 50122 Florence</item>
<item>New York City</item>
<item>2-3-1 Asakusa, Taitō-ku, Tokyo, Japan</item>
<item>At Meydanı No:7, 34122 Fatih/İstanbul, Turkey</item>
<item>Cape Town, South Africa</item>
</string-array>
<array name="place_avator">
<item>@drawable/a_avator</item>
<item>@drawable/b_avator</item>
<item>@drawable/c_avator</item>
<item>@drawable/d_avator</item>
<item>@drawable/e_avator</item>
<item>@drawable/f_avator</item>
</array>
</resources>
strings.xml
<resources>
<string name="app_name">Learn12</string>
<string name="action_settings">Settings</string>
<string name="item_title">Palais Garnier</string>
<string name="item_desc">The Palais Garnier which locates in Paris was built
</string>
<string name="detail_desc">Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed doeiusmod tempor incididunt ut labore et dolore magna ` `aliqua. Ut enim ad minim veniam, quisnostrud exercitation ullamco laboris ` `nisi ut aliquip ex ea commodo consequat. Duis auteirure dolor in ` ` `` `reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla ` ` `pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa ` `qui officia
deserunt mollit anim id est laborum.
</string>
<string name="detail_location">"8 Rue Scribe, 75009 Paris, France"` ` `</string>
</resources>
Recycler_view.xml
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:scrollbars="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
您正在膨胀错误的布局 item_tile.xml
而不是 item_list.xml
来创建 ViewHolder 视图。
改变这个
@Override
public MyrecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tile, parent, false);
MyrecyclerViewHolder recyclerview = new MyrecyclerViewHolder(v);
return recyclerview;
}
到
@Override
public MyrecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent,false);
MyrecyclerViewHolder recyclerview = new MyrecyclerViewHolder(v);
return recyclerview;
}