Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecycleView.V的getAdapterPosition()方法始终返回-1_Android - Fatal编程技术网

Android RecycleView.V的getAdapterPosition()方法始终返回-1

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

使用RecycleView时,
getAdapterPosition()
总是返回-1。我不知道为什么。

My
onCreateViewHolder
代码如下:

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 void
onClick(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水果);
}
}
}

发布回收器视图适配器。请参阅