我在MainActivity中使用带有Header TextView的Nested RecyclerView,它将在设置并获取文本后向我显示Header TextView上的RecyclerView列表Text。
Parent RecyclerView列表工作正常,但Child RecyclerView列表未在TextView上显示列表文本。
点击Child RecyclerView列表后,应用程序崩溃。
这是我的文件:-
ParentAdapter.java
public class MylistAdapter extends RecyclerView.Adapter<MylistAdapter.sohit> {
String[] list;
int[] img;
private Click click;
private Context context;
String listz[]={"Animals","Phone","Messenger","facebook","Whatsapp","Instagram","Contact"};
int imgz[]={R.drawable.ic_launcher_background,R.drawable.ic_launcher_background,R.drawable.ic_launcher_background,R.drawable.ic_launcher_background,R.drawable.ic_launcher_background,R.drawable.ic_launcher_background,R.drawable.ic_launcher_background,};
public MylistAdapter(String[] list, int[] img, Click click) {
this.list = list;
this.img = img;
this.click = click;
}
@NonNull
@Override
public MylistAdapter.sohit onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater=LayoutInflater.from(parent.getContext());
View listItem=layoutInflater.inflate(R.layout.list_item,parent,false);
sohit sohit=new sohit(listItem);
return sohit;
}
@Override
public void onBindViewHolder(@NonNull final MylistAdapter.sohit holder, final int position) {
holder.textView.setText(list[position]);
holder.imageView.setImageResource(img[position]);
holder.linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
click.onClick(holder.textView.getText().toString());
Toast.makeText(v.getContext(),"Click on Item: "+list[position],Toast.LENGTH_LONG).show();
}
});
InnerListAdapter adapter1=new InnerListAdapter(listz, imgz, context, new InnerListAdapter.Clickz() {
@Override
public void onClickz(String b) {
holder.textView2.setText(b);
}
});
// recyclerView1.setNestedScrollingEnabled(false);
holder.recyclerView.setLayoutManager(new
LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false));
holder.recyclerView.setAdapter(adapter1);
}
@Override
public int getItemCount() {
return list.length;
}
public class sohit extends RecyclerView.ViewHolder {
public TextView textView;
public ImageView imageView;
public LinearLayout linearLayout;
public TextView textView2;
RecyclerView recyclerView;
public sohit(@NonNull View itemView) {
super(itemView);
this.textView2=(TextView)itemView.findViewById(R.id.textz);
this.imageView=(ImageView)itemView.findViewById(R.id.imageView);
this.textView=(TextView)itemView.findViewById(R.id.textView);
this.recyclerView=(RecyclerView)itemView.findViewById(R.id.recyclerView2);
linearLayout=(LinearLayout)itemView.findViewById(R.id.linearLayout);
}
}
public interface Click
{
void onClick(String a);
}
}
ChildAdapter.java
public class InnerListAdapter extends RecyclerView.Adapter<InnerListAdapter.inner> {
String[] listz;
int[] imgz;
Context context;
private Clickz clickz;
public InnerListAdapter(String[] listz, int[] imgz,Context context,Clickz clickz) {
this.listz = listz;
this.imgz = imgz;
this.context=context;
this.clickz=clickz;
}
@NonNull
@Override
public inner onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater=LayoutInflater.from(parent.getContext());
View listitemz=inflater.inflate(R.layout.inner_list_item,parent,false);
inner inner=new inner(listitemz);
return inner;
}
@Override
public void onBindViewHolder(@NonNull final inner holder, int position) {
holder.textView.setText(listz[position]);
holder.imageView.setImageResource(imgz[position]);
holder.linearLayout2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickz.onClickz(holder.textView.getText().toString());
}
});
}
@Override
public int getItemCount() {
return listz.length;
}
public class inner extends RecyclerView.ViewHolder {
TextView textView;
ImageView imageView;
LinearLayout linearLayout2;
public inner(@NonNull View itemView) {
super(itemView);
this.linearLayout2=(LinearLayout)itemView.findViewById(R.id.linearLayout2);
this.imageView=(ImageView)itemView.findViewById(R.id.imageView2);
this.textView=(TextView) itemView.findViewById(R.id.textView2);
}
}
public interface Clickz{
void onClickz(String b);
}
}
主要活动.java
public class MainActivity extends AppCompatActivity {
String list[]={"Email","Phone","Messenger","facebook","Whatsapp","Instagram","Contact"};
int img[]={R.drawable.ic_launcher_background,R.drawable.ic_launcher_background,R.drawable.ic_launcher_background,R.drawable.ic_launcher_background,R.drawable.ic_launcher_background,R.drawable.ic_launcher_background,R.drawable.ic_launcher_background,};
private Context context;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView)findViewById(R.id.textz);
final RecyclerView recyclerView=(RecyclerView)findViewById(R.id.recyclerView);
recyclerView.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL));
MylistAdapter adapter=new MylistAdapter(list, img, new MylistAdapter.Click() {
@Override
public void onClick(String a) {
textView.setText(a);
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
}
}
Error Log:-
Process: com.example.recyclerview, PID: 25309
java.lang.NullPointerException
at com.example.recyclerview.MylistAdapter$2.onClick(MylistAdapter.java:60)
at com.example.recyclerview.InnerListAdapter$1.onClick(InnerListAdapter.java:44)
at android.view.View.performClick(View.java:4444)
at android.view.View$PerformClick.run(View.java:18440)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5052)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
at dalvik.system.NativeStart.main(Native Method)
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="70dp"
android:text="hello"
android:id="@+id/textz"
android:textSize="50dp"
android:gravity="center"/>
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recyclerView"/>
</LinearLayout>
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:id="@+id/linearLayout"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView"
android:layout_width="123dp"
android:layout_height="110dp" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="110dp"
android:textAppearance="@style/TextAppearance.AppCompat.Display1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recyclerView2"/>
</LinearLayout>
</LinearLayout>
inner_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout2"
android:orientation="horizontal" android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageView2"
android:layout_width="123dp"
android:layout_height="80dp"/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello"
android:textSize="15dp"
android:gravity="center"/>
请确保以下布局文件包含相应的UI元素(视图(:
list_item.xml:
CCD_ 1(文本视图(,CCD_ 2(图像视图(,CCD_ 3(文本视图(,CCD_ 4(RecyclerView(,linearLayout
(LinearLayout(
inner_list_item.xml:linearLayout2
(LinearLayout(,CCD_ 7(图像视图(,textView2
(文本视图(
activity_main.xml:CCD_ 9(RecyclerView(,textz
0(文本视图(
编辑:
MylistAdapter.java:
InnerListAdapter adapter1=new InnerListAdapter(listz, imgz, context, new InnerListAdapter.Clickz() {
@Override
public void onClickz(String b) {
holder.textView2.setText(b); // <-- causing the crash
}
});
更改holder.textView2.setText(b);
->holder.textView.setText(b);
或调用接口方法来更改textview在主活动中的文本或者只是评论行并检查