RecyclerView具有不同的活动

时间:2018-03-21 13:16:49

标签: java android xml android-studio

我拥有的东西:RecyclerView,上面有酒吧,咖啡店等地方的照片。

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

我的问题:如何为第三张图片设置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);

        }
    }
}

我的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));


    }
}

4 个答案:

答案 0 :(得分:1)

  

在视图上附加点击侦听器

 holder.imgView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                          //Do Something
          }

答案 1 :(得分:0)

如果您需要仅为List中的第三个位置设置onClick 从view.setOnClickListener(this);

中删除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 Statement

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

        }

答案 2 :(得分:0)

在您的适配器 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
            }

        });

答案 3 :(得分:0)

03