内部RecyclerView列表文本未通过SetText显示在标头TextView上



我在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(,textz0(文本视图(

编辑:

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在主活动中的文本或者只是评论行并检查

最新更新