Java 具有不同活动的RecyclerView

Java 具有不同活动的RecyclerView,java,android,xml,android-studio,Java,Android,Xml,Android Studio,我拥有的:一个回收视图,上面有酒吧、咖啡店等地方的图片 我想要的是:当你点击其中一张图片时,我会向你显示所选地点的信息 我的问题:例如,如何为第三张图片设置OnCLickListener 请,如果你能解释的代码,这将是伟大的,我还没有很好的编程,所以我真的很感激 我的适配器 public class AdapterDatos extends RecyclerView.Adapter<AdapterDatos.ViewHolder> implements View.OnClic

我拥有的:一个
回收视图
,上面有酒吧、咖啡店等地方的图片

我想要的是:当你点击其中一张图片时,我会向你显示所选地点的信息

我的问题:例如,如何为第三张图片设置
OnCLickListener

请,如果你能解释的代码,这将是伟大的,我还没有很好的编程,所以我真的很感激

我的适配器

    public class AdapterDatos extends RecyclerView.Adapter<AdapterDatos.ViewHolder> implements View.OnClickListener {

    ArrayList<ClaseNueva> listalugares;
    private View.OnClickListener listener;

    public AdapterDatos(ArrayList<ClaseNueva> listaLugares) {
        listalugares = listaLugares;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {//esto es lo que hacereferencia al xml donde vamos a meter la info
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list,null,false);//aqui le asignamos el valor del view al viewHolder
        view.setOnClickListener(this);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {// este metodo es el que se encarga de establecer la conexion entre el adaptador y la clase Viewholder ( a la cual le asignamos el xml)
        holder.etiLugares.setText(listalugares.get(position).getLugares());// asi se asignan los textos
        holder.Foto.setImageResource(listalugares.get(position).getFoto());//asi se asignan las fotos


    }

    @Override
    public int getItemCount() {//este metodo va a decir el tamaño del viewHolder, en este caso de tamaño del array listalugares
        return listalugares.size();//se hace asi
    }

    public void setOnClickListener(View.OnClickListener listener){
        this.listener = listener;
    }


    @Override
    public void onClick(View view) {


        if(listener!= null){
            listener.onClick(view);
       }
  }


    public class ViewHolder extends RecyclerView.ViewHolder{

        TextView etiLugares;
        ImageView Foto;
        Context context;

        public ViewHolder(View itemView) {
            super(itemView);
            etiLugares = (TextView) itemView.findViewById(R.id.idNombre);//esto hace referencia a los elementos donde queremos meter la info
            Foto = (ImageView) itemView.findViewById(R.id.idImagen);

        }
    }
}
公共类AdapterDatos扩展了RecyclerView。适配器实现了View.OnClickListener{
ArrayList listalugares;
private View.OnClickListener监听器;
公共适配器(ArrayList listaLugares){
listalugares=listalugares;
}
@凌驾
public ViewHolder onCreateViewHolder(ViewGroup父对象,int viewType){//esto es lo que hacereferenceia al xml donde vamos a meter la info
View View=LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list,null,false);//获取所有视图
view.setOnClickListener(这个);
返回新的ViewHolder(视图);
}
@凌驾
BindViewHolder(ViewHolder holder,内部位置)上的公共无效{//este metodo es el que se Engarga de establecer la conexion entre el Adapter y la clase ViewHolder
holder.etiLugares.setText(listalugares.get(position.getLugares());//asi se asignan los textos
holder.Foto.setImageResource(listalugares.get(position.getFoto());//asi se asignan las fotos
}
@凌驾
public int getItemCount(){//este metodo va a decir el-tamaño del viewHolder,en este caso de tamaño del array listalugares
返回listalugares.size();//se hace asi
}
public void setOnClickListener(View.OnClickListener侦听器){
this.listener=listener;
}
@凌驾
公共void onClick(视图){
if(侦听器!=null){
onClick(视图);
}
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
TextView etiLugares;
图像视图Foto;
语境;
公共视图持有者(视图项视图){
超级(项目视图);
etiLugares=(TextView)itemView.findViewById(R.id.idNombre);//在查询表信息中的元素参考
Foto=(ImageView)itemView.findViewById(R.id.idImagen);
}
}
}
我的java类

    public class foodAndGo extends Activity {

    ArrayList<ClaseNueva> listalugares;
    RecyclerView recyclerLugares;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_food_and_go);

        listalugares = new ArrayList<>();
        recyclerLugares = (RecyclerView) findViewById(R.id.RecyclerID);
        recyclerLugares.setLayoutManager(new LinearLayoutManager(this));


        llenarNombres();

        AdapterDatos adapter = new AdapterDatos(listalugares);
        adapter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"Seleccion"+listalugares.get(recyclerLugares.getChildAdapterPosition(v)).getLugares(),Toast.LENGTH_SHORT).show();
                Intent myIntent = new Intent(foodAndGo.this, MapsActivity.class);
                startActivity(myIntent);
            }
        });
      recyclerLugares.setAdapter(adapter);

    }



    private void llenarNombres() {
        listalugares.add(new ClaseNueva("Restaurantes", R.drawable.carnemejor));
        listalugares.add(new ClaseNueva("Bares", R.drawable.beers));
        listalugares.add(new ClaseNueva("Cafeterías",R.drawable.desayunosmejor));
        listalugares.add(new ClaseNueva("Pizzerias",R.drawable.pizzaamejor));
        listalugares.add(new ClaseNueva("Favoritos",R.drawable.favoritosmejo));


    }
}
公共类foodAndGo扩展活动{
ArrayList listalugares;
RecyclerView recyclerLugares;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、活动、食物和围棋);
listalugares=newarraylist();
recyclerLugares=(RecyclerView)findViewById(R.id.RecyclerID);
recyclerLugares.setLayoutManager(新的LinearLayoutManager(本));
llenarNombres();
AdapterDatos adapter=新AdapterDatos(listalugares);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(getApplicationContext(),“Seleccion”+listalugares.get(recyclerLugares.getChildAdapterPosition(v)).getLugares(),Toast.LENGTH_SHORT.show();
Intent myIntent=新的Intent(foodAndGo.this、MapsActivity.class);
星触觉(myIntent);
}
});
回收器集控器适配器(适配器);
}
私有无效llenarNombres(){
添加(新ClaseNueva(“Restaurants”,R.drawable.carnemejor));
添加(新ClaseNueva(“Bares”,R.drawable.beers));
添加(新的ClaseNueva(“Cafeterías”,R.drawable.Desayunosmeyjor));
添加(新的ClaseNueva(“比萨店”,R.drawable.pizzaamejor));
添加(新的ClaseNueva(“Favoritos”,R.drawable.favoritosmejo));
}
}

如果只需要为列表中的第三个位置设置onClick 删除
view.setOnClickListener(此)来自
onCreateViewHolder

@Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {//esto es lo que hacereferencia al xml donde vamos a meter la info
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list,null,false);//aqui le asignamos el valor del view al viewHolder

        return new ViewHolder(view);
    }
使用if语句,仅为第三个位置在
OnBindViewHolder
中设置OnClick

 @Override
        public void onBindViewHolder(ViewHolder holder, int position) {// este metodo es el que se encarga de establecer la conexion entre el adaptador y la clase Viewholder ( a la cual le asignamos el xml)
            holder.etiLugares.setText(listalugares.get(position).getLugares());// asi se asignan los textos
            holder.Foto.setImageResource(listalugares.get(position).getFoto());//asi se asignan las fotos
               if(holder.getAdapterPosition() == 3)
         holder.itemView.setOnClickListener(this); // Parent ID

        }
在视图上附加一个单击侦听器


在适配器的onBindViewHolder中,尝试以下代码:

holder.Foto.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
            if(position==0){
              Intent intent = new Intent(context,MapsActivity.class) // You can get context from onCreateViewHolder, initialize one from parent.getContext() or pass one in constructor of adapter
              startActivity(intent) 

            }else if(position==1){
             // open Second Activity
            }else{
             // open Third Activity
            }

        });

所以现在你必须能够通过你的recyclerview项目点击事件打开一个活动,是这样吗?您想再打开两个吗?
setClickListener
onBindViewHolder
中,检查
位置==3
请不要重复问题。简单地用你拥有的任何新信息、你尝试过的任何新代码编辑这篇文章,或者解释为什么答案不起作用,都会把它推到活动队列的顶部。我把它作为新的一个的副本关闭了,因为你显然在那里得到了你的答案,但是,在将来,请编辑原始的。它不允许我实现“startActivity”函数它不允许我实现“startActivity”函数你可以使用上下文调用startActivity函数,我已经告诉过如何使用上下文,你可以在代码中的注释中找到它。感谢你一直回答我的朋友,但正如我所说的,我还不擅长编程,我非常感谢代码示例,抱歉我的无知:(再次感谢你的回答它不允许我实现“startActivity”功能它不允许我实现“startActivity”函数Create Context Context;全局,然后在onCreateViewHolder中给出以下行“Context=parent.getContext();”使用上下文可以启动活动您可以从onCreateViewHolder“parent.getContext()”获取上下文您可以使用上下文调用启动活动
holder.Foto.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
            if(position==0){
              Intent intent = new Intent(context,MapsActivity.class) // You can get context from onCreateViewHolder, initialize one from parent.getContext() or pass one in constructor of adapter
              startActivity(intent) 

            }else if(position==1){
             // open Second Activity
            }else{
             // open Third Activity
            }

        });
     @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {//esto es lo que hacereferencia al xml donde vamos a meter la info
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list,null,false);//aqui le asignamos el valor del view al viewHolder

            return new ViewHolder(view);
        }

        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {// este metodo es el que se encarga de establecer la conexion entre el adaptador y la clase Viewholder ( a la cual le asignamos el xml)
            holder.etiLugares.setText(listalugares.get(position).getLugares());// asi se asignan los textos
            holder.Foto.setImageResource(listalugares.get(position).getFoto());//asi se asignan las fotos
            if(position%3==0)
            holder.Foto.setOnClickListener(this);

        }