Android RecycleView.V的getAdapterPosition()方法始终返回-1
使用RecycleView时,Android RecycleView.V的getAdapterPosition()方法始终返回-1,android,Android,使用RecycleView时,getAdapterPosition()总是返回-1。我不知道为什么。 MyonCreateViewHolder代码如下: public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,fals
getAdapterPosition()
总是返回-1。我不知道为什么。
MyonCreateViewHolder
代码如下:
public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);
final ViewHolder holder = new ViewHolder(view);
// add OnClickListener
holder.mFruitView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getAdapterPosition();
Fruit fruit = mFruitList.get(position);
Toast.makeText(v.getContext(),"You Click : " + fruit.getName(),Toast.LENGTH_SHORT).show();
}
});
return new ViewHolder(view);
}
static class ViewHolder extends RecyclerView.ViewHolder{
View mFruitView;
ImageView fruitImage;
TextView fruitName;
public ViewHolder(View itemView) {
super(itemView);
mFruitView = itemView;
fruitImage = (ImageView) itemView.findViewById(R.id.iv_fruit);
fruitName = (TextView) itemView.findViewById(R.id.tv_fruit);
}
}
而我的视图持有者代码如下:
public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);
final ViewHolder holder = new ViewHolder(view);
// add OnClickListener
holder.mFruitView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getAdapterPosition();
Fruit fruit = mFruitList.get(position);
Toast.makeText(v.getContext(),"You Click : " + fruit.getName(),Toast.LENGTH_SHORT).show();
}
});
return new ViewHolder(view);
}
static class ViewHolder extends RecyclerView.ViewHolder{
View mFruitView;
ImageView fruitImage;
TextView fruitName;
public ViewHolder(View itemView) {
super(itemView);
mFruitView = itemView;
fruitImage = (ImageView) itemView.findViewById(R.id.iv_fruit);
fruitName = (TextView) itemView.findViewById(R.id.tv_fruit);
}
}
发生错误时的日志如下:
java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
private static final String TAG = "FruitAdapter";
private List<Fruit> mFruitList;
public FruitAdapter(List<Fruit> fruitList){
mFruitList = fruitList;
}
@Override
public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);
final ViewHolder holder = new ViewHolder(view);
// add OnClickListener
holder.mFruitView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fruit fruit = mFruitList.get(position);
Toast.makeText(v.getContext(),"You Click : " + fruit.getName(),Toast.LENGTH_SHORT).show();
}
});
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Fruit fruit = mFruitList.get(position);
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
}
@Override
public int getItemCount() {
return mFruitList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder{
View mFruitView;
ImageView fruitImage;
TextView fruitName;
public ViewHolder(View itemView) {
super(itemView);
mFruitView = itemView;
fruitImage = (ImageView) itemView.findViewById(R.id.iv_fruit);
fruitName = (TextView) itemView.findViewById(R.id.tv_fruit);
}
}
}
任何帮助都将不胜感激我的适配器代码:
java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
private static final String TAG = "FruitAdapter";
private List<Fruit> mFruitList;
public FruitAdapter(List<Fruit> fruitList){
mFruitList = fruitList;
}
@Override
public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);
final ViewHolder holder = new ViewHolder(view);
// add OnClickListener
holder.mFruitView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fruit fruit = mFruitList.get(position);
Toast.makeText(v.getContext(),"You Click : " + fruit.getName(),Toast.LENGTH_SHORT).show();
}
});
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Fruit fruit = mFruitList.get(position);
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
}
@Override
public int getItemCount() {
return mFruitList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder{
View mFruitView;
ImageView fruitImage;
TextView fruitName;
public ViewHolder(View itemView) {
super(itemView);
mFruitView = itemView;
fruitImage = (ImageView) itemView.findViewById(R.id.iv_fruit);
fruitName = (TextView) itemView.findViewById(R.id.tv_fruit);
}
}
}
public类适配器扩展了RecyclerView.Adapter{
私有静态最终字符串标记=“水果适配器”;
私人名单;
公共水果适配器(列表水果列表){
mFruitList=结果列表;
}
@凌驾
public ViewHolder onCreateViewHolder(最终视图组父级,int-viewType){
View=LayoutInflater.from(parent.getContext()).flate(R.layout.fruit\u项,parent,false);
最终视图持有者=新视图持有者(视图);
//添加OnClickListener
holder.mFruitView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
水果=mFruitList.get(位置);
Toast.makeText(v.getContext(),“您单击:”+fruit.getName(),Toast.LENGTH\u SHORT.show();
}
});
返回新的ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
水果=mFruitList.get(位置);
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
}
@凌驾
public int getItemCount(){
返回mFruitList.size();
}
静态类ViewHolder扩展了RecyclerView.ViewHolder{
查看mFruitView;
图像视图;
文本视图名称;
公共视图持有者(视图项视图){
超级(项目视图);
mFruitView=项目视图;
水果图像=(ImageView)itemView.findViewById(R.id.iv_水果);
水果名=(TextView)itemView.findViewById(R.id.tv\u水果);
}
}
}
修改适配器:
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
private static final String TAG = FruitAdapter.class.getSimpleName();
private List<Fruit> mFruitList;
public FruitAdapter(List<Fruit> fruitList) {
mFruitList = fruitList;
}
@Override
public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
final Fruit fruit = mFruitList.get(position);
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
holder.mFruitView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "You Click : " + fruit.getName(), Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
if (mFruitList == null) return 0;
else return mFruitList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
View mFruitView;
ImageView fruitImage;
TextView fruitName;
public ViewHolder(View itemView) {
super(itemView);
mFruitView = itemView;
fruitImage = (ImageView) itemView.findViewById(R.id.iv_fruit);
fruitName = (TextView) itemView.findViewById(R.id.tv_fruit);
}
}
}
public类适配器扩展了RecyclerView.Adapter{
私有静态最终字符串标记=FruitAdapter.class.getSimpleName();
私人名单;
公共水果适配器(列表水果列表){
mFruitList=结果列表;
}
@凌驾
public ViewHolder onCreateViewHolder(最终视图组父级,int-viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.fruit_项,parent,false);
返回新的ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
最终水果=mFruitList.get(位置);
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
holder.mFruitView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(v.getContext(),“您单击:”+fruit.getName(),Toast.LENGTH\u SHORT.show();
}
});
}
@凌驾
public int getItemCount(){
if(mFruitList==null)返回0;
否则返回mFruitList.size();
}
静态类ViewHolder扩展了RecyclerView.ViewHolder{
查看mFruitView;
图像视图;
文本视图名称;
公共视图持有者(视图项视图){
超级(项目视图);
mFruitView=项目视图;
水果图像=(ImageView)itemView.findViewById(R.id.iv_水果);
水果名=(TextView)itemView.findViewById(R.id.tv\u水果);
}
}
}
当recyclerview
进行布局计算时,方法getAdapterPosition()
总是返回-1
。
您正在ViewHolder
中调用此方法。这意味着RecyclerView
正在进行计算。
如果需要视图的单击操作中的位置,请在public voidonClick(final view v)
方法中调用它,例如:
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
private static final String TAG = "FruitAdapter";
private List<Fruit> mFruitList;
public FruitAdapter(List<Fruit> fruitList) {
mFruitList = fruitList;
}
@Override
public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
Fruit fruit = mFruitList.get(position);
Toast.makeText(v.getContext(), "You Click : " + fruit.getName(), Toast.LENGTH_SHORT).show();
}
@Override
public int getItemCount() {
return mFruitList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
View mFruitView;
ImageView fruitImage;
TextView fruitName;
public ViewHolder(View itemView) {
super(itemView);
mFruitView = itemView;
fruitImage = (ImageView) itemView.findViewById(R.id.iv_fruit);
fruitName = (TextView) itemView.findViewById(R.id.tv_fruit);
}
}
}
public类适配器扩展了RecyclerView.Adapter{
私有静态最终字符串标记=“水果适配器”;
私人名单;
公共水果适配器(列表水果列表){
mFruitList=结果列表;
}
@凌驾
public ViewHolder onCreateViewHolder(最终视图组父级,int-viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.fruit_项,parent,false);
返回新的ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(最终视图v){
水果=mFruitList.get(位置);
Toast.makeText(v.getContext(),“您单击:”+fruit.getName(),Toast.LENGTH\u SHORT.show();
}
@凌驾
public int getItemCount(){
返回mFruitList.size();
}
静态类ViewHolder扩展了RecyclerView.ViewHolder{
查看mFruitView;
图像视图;
文本视图名称;
公共视图持有者(视图项视图){
超级(项目视图);
mFruitView=项目视图;
水果图像=(ImageView)itemView.findViewById(R.id.iv_水果);
水果名=(TextView)itemView.findViewById(R.id.tv\u水果);
}
}
}
发布回收器视图适配器。请参阅