繁体   English   中英

getAdapterPosition() 每次在 OnClick() 方法中返回 -1

[英]getAdapterPosition() returns -1 every time in OnClick() method

我被这个问题困住了:AdapterPosition 永远不会改变,当我从我的回收站点击一个项目时,它总是 -1。

public class RecyclerMapAdapter extends RecyclerView.Adapter<RecyclerMapAdapter.ViewHolder> {
    Context context;
    ArrayList<Features> features;
    ImageLoader imageLoader;
    public static String TAG = MapsActivity.class.getSimpleName();


    public RecyclerMapAdapter(Context context, ArrayList<Features> features) {
        this.context = context;
        this.features = features;
    }

    @Override
    public RecyclerMapAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.map_row, parent, false);
        final RecyclerMapAdapter.ViewHolder viewHolder = new RecyclerMapAdapter.ViewHolder(v);
        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ListMapActivity mapsActivity = (ListMapActivity) context;
                Intent intent = new Intent(mapsActivity, DescriptionMapActivity.class);

                Features feature = features.get(viewHolder.getAdapterPosition());
                MyProperties myProperties = feature.getProperties();
                intent.putExtra("data", myProperties);
                mapsActivity.startActivity(intent);
            }
        });

        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Features feature = features.get(position);
        MyProperties myProperties = feature.getProperties();
        holder.title_map.setText(myProperties.getName());

        imageLoader = ServerImageAdapter.getInstance(context).getImageLoader();
        imageLoader.get(myProperties.getImage_url(),
                ImageLoader.getImageListener(
                        holder.iv_map,//Server Image
                        R.mipmap.ic_launcher,//Before loading server image the default showing image.
                        android.R.drawable.ic_dialog_alert //Error image if requested image dose not found on server.
                )
        );

        holder.iv_map.setImageUrl(myProperties.getImage_url(), imageLoader);

    }

    @Override
    public int getItemCount() {
        return features.size();
    }

    static class ViewHolder extends RecyclerView.ViewHolder{
        public TextView title_map;
        public TextView dist;
        public NetworkImageView iv_map;

        public ViewHolder(View itemView) {
            super(itemView);
            title_map = (TextView) itemView.findViewById(R.id.tv_map_list);
            dist = (TextView) itemView.findViewById(R.id.dist_map);
            iv_map = (NetworkImageView) itemView.findViewById(R.id.map_row_image);

        }
    }
}

为了帮助你理解上下文,我的东西是如何工作的:

我在带有标记的地图上,我可以通过单击每个标记的信息窗口来打开新活动,而且我还有一个菜单项,它打开带有所有标记的回收站视图,当我单击列表中的一个项目时,它应该打开与单击 infoWindow 时的活动相同。

除了因为 getAdapterPosition() 返回 -1,所以单击列表中的项目时,我什么都有。

我已经将这种 recyclerview 的实现用于其他用途,它工作正常,唯一的区别是片段(有效),另一个是活动(无效)。

您正在创建一个 viewHolder,对其执行操作。 但最后,您将全新的视图持有者实例发送到 RecyclerView

@Override
public RecyclerMapAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.map_row, parent, false);
    final RecyclerMapAdapter.ViewHolder viewHolder = new RecyclerMapAdapter.ViewHolder(v);
    v.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ListMapActivity mapsActivity = (ListMapActivity) context;
            Intent intent = new Intent(mapsActivity, DescriptionMapActivity.class);

            Features feature = features.get(viewHolder.getAdapterPosition());
            MyProperties myProperties = feature.getProperties();
            intent.putExtra("data", myProperties);
            mapsActivity.startActivity(intent);
        }
    });

    return viewHolder;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM