当我点击 recyclerview 中的任何项目时,应用程序崩溃
App is crashing when i click on any item in recyclerview
我正在创建一个回收器视图,并尝试在使用界面单击任何项目时创建一个 toast(我是第一次这样做)。但是当我点击回收站视图中的任何项目时,我的应用程序崩溃了。
这是我的主要 java 文件代码。
package com.example.creatingrecyclerview;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements newsOnCkicked {
RecyclerView r;
String arr[]={"1","2","3","4","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
r=findViewById(R.id.rv);
r.setLayoutManager(new LinearLayoutManager(this));
CustomAdapter c=new CustomAdapter(arr,this);
r.setAdapter(c);
}
@Override
public void onClick(View view) {
}
@Override
public String onItemClicked(String s) {
Toast.makeText(this, "Item clicked is "+ s, Toast.LENGTH_SHORT).show();
return null;
}
}
这是我的自定义适配器 java 代码。
package com.example.creatingrecyclerview;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private String[] localDataSet;
private newsOnCkicked k;
/**
* Provide a reference to the type of views that you are using
* (custom ViewHolder).
*/
public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView textView;
public ViewHolder(View view) {
super(view);
// Define click listener for the ViewHolder's View
textView = (TextView) view.findViewById(R.id.textView2);
}
public TextView getTextView() {
return textView;
}
}
/**
* Initialize the dataset of the Adapter.
*
* @param dataSet String[] containing the data to populate views to be used
* by RecyclerView.
*/
public CustomAdapter(String[] dataSet,newsOnCkicked k) {
localDataSet = dataSet;
this.k=k;
}
// Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
// Create a new view, which defines the UI of the list item
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.mylayout, viewGroup, false);
RecyclerView.ViewHolder v=new ViewHolder(view);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View vi) {
k.onItemClicked(localDataSet[v.getAdapterPosition()]);
}
});
return new ViewHolder(view);
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
// Get element from your dataset at this position and replace the
// contents of the view with that element
viewHolder.getTextView().setText(localDataSet[viewHolder.getAdapterPosition()]);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return localDataSet.length;
}
}
interface newsOnCkicked extends View.OnClickListener {
String onItemClicked(String s);
}
请帮我找出代码中的错误。会很棒:)
您必须使用 viewHolder 设置点击监听器。复制下面的代码然后粘贴 运行
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private String[] localDataSet;
private newsOnCkicked k;
/**
* Provide a reference to the type of views that you are using
* (custom ViewHolder).
*/
public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView textView;
public ViewHolder(View view) {
super(view);
// Define click listener for the ViewHolder's View
textView = (TextView) view.findViewById(R.id.textView2);
}
public TextView getTextView() {
return textView;
}
}
/**
* Initialize the dataset of the Adapter.
*
* @param dataSet String[] containing the data to populate views to be used
* by RecyclerView.
*/
public CustomAdapter(String[] dataSet,newsOnCkicked k) {
localDataSet = dataSet;
this.k=k;
}
// Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
// Create a new view, which defines the UI of the list item
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.mylayout, viewGroup, false);
return new ViewHolder(view);
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
// Get element from your dataset at this position and replace the
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View vi) {
k.onItemClicked(localDataSet[viewHolder.getAdapterPosition()]);
}
});
viewHolder.getTextView().setText(localDataSet[viewHolder.getAdapterPosition()]);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return localDataSet.length;
}
}
interface newsOnCkicked extends View.OnClickListener {
String onItemClicked(String s);
}
如果仍然收到下面的问题评论和错误日志。
我正在创建一个回收器视图,并尝试在使用界面单击任何项目时创建一个 toast(我是第一次这样做)。但是当我点击回收站视图中的任何项目时,我的应用程序崩溃了。
这是我的主要 java 文件代码。
package com.example.creatingrecyclerview;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements newsOnCkicked {
RecyclerView r;
String arr[]={"1","2","3","4","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
r=findViewById(R.id.rv);
r.setLayoutManager(new LinearLayoutManager(this));
CustomAdapter c=new CustomAdapter(arr,this);
r.setAdapter(c);
}
@Override
public void onClick(View view) {
}
@Override
public String onItemClicked(String s) {
Toast.makeText(this, "Item clicked is "+ s, Toast.LENGTH_SHORT).show();
return null;
}
}
这是我的自定义适配器 java 代码。
package com.example.creatingrecyclerview;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private String[] localDataSet;
private newsOnCkicked k;
/**
* Provide a reference to the type of views that you are using
* (custom ViewHolder).
*/
public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView textView;
public ViewHolder(View view) {
super(view);
// Define click listener for the ViewHolder's View
textView = (TextView) view.findViewById(R.id.textView2);
}
public TextView getTextView() {
return textView;
}
}
/**
* Initialize the dataset of the Adapter.
*
* @param dataSet String[] containing the data to populate views to be used
* by RecyclerView.
*/
public CustomAdapter(String[] dataSet,newsOnCkicked k) {
localDataSet = dataSet;
this.k=k;
}
// Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
// Create a new view, which defines the UI of the list item
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.mylayout, viewGroup, false);
RecyclerView.ViewHolder v=new ViewHolder(view);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View vi) {
k.onItemClicked(localDataSet[v.getAdapterPosition()]);
}
});
return new ViewHolder(view);
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
// Get element from your dataset at this position and replace the
// contents of the view with that element
viewHolder.getTextView().setText(localDataSet[viewHolder.getAdapterPosition()]);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return localDataSet.length;
}
}
interface newsOnCkicked extends View.OnClickListener {
String onItemClicked(String s);
}
请帮我找出代码中的错误。会很棒:)
您必须使用 viewHolder 设置点击监听器。复制下面的代码然后粘贴 运行
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private String[] localDataSet;
private newsOnCkicked k;
/**
* Provide a reference to the type of views that you are using
* (custom ViewHolder).
*/
public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView textView;
public ViewHolder(View view) {
super(view);
// Define click listener for the ViewHolder's View
textView = (TextView) view.findViewById(R.id.textView2);
}
public TextView getTextView() {
return textView;
}
}
/**
* Initialize the dataset of the Adapter.
*
* @param dataSet String[] containing the data to populate views to be used
* by RecyclerView.
*/
public CustomAdapter(String[] dataSet,newsOnCkicked k) {
localDataSet = dataSet;
this.k=k;
}
// Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
// Create a new view, which defines the UI of the list item
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.mylayout, viewGroup, false);
return new ViewHolder(view);
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
// Get element from your dataset at this position and replace the
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View vi) {
k.onItemClicked(localDataSet[viewHolder.getAdapterPosition()]);
}
});
viewHolder.getTextView().setText(localDataSet[viewHolder.getAdapterPosition()]);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return localDataSet.length;
}
}
interface newsOnCkicked extends View.OnClickListener {
String onItemClicked(String s);
}
如果仍然收到下面的问题评论和错误日志。