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

问题描述 投票:0回答:1

我在MainActivity中使用带有Header TextView的嵌套RecyclerView,它将在设置并获取文本后在Header TextView上向我显示RecyclerView列表文本。

父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);
}
}

MainActivity.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"/>

java android android-recyclerview
1个回答
0
投票

请确保以下布局文件包含相应的UI元素(视图):

list_item.xml:

textz(TextView),imageView(ImageView),textView(TextView),recyclerView2(RecyclerView),linearLayout(LinearLayout)

inner_list_item.xml:linearLayout2(线性布局),imageView2(ImageView),textView2(TextView)

activity_main.xml:recyclerView(RecyclerView),textz(TextView)

编辑: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);

© www.soinside.com 2019 - 2024. All rights reserved.