【问题标题】:RecyclerView with ImageView and differents Activities带有 ImageView 和不同活动的 RecyclerView
【发布时间】:2018-08-30 20:37:21
【问题描述】:

我所拥有的:一个 RecyclerView,其中包含酒吧、咖啡店等场所的图片。

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

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

很多人告诉我在我的“onBindViewHolder()”方法上做,但它不允许我实现“startActivity”所以我可以传递给“Intent”如果你可以用代码解释一下就好了,我还不太会编程,非常感谢

我的适配器

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


}

}

【问题讨论】:

    标签: java android xml android-studio android-recyclerview


    【解决方案1】:

    内部foodAndGo活动变化,

    AdapterDatos adapter = new AdapterDatos(listalugares);AdapterDatos adapter = new AdapterDatos(listalugares,foodAndGo.this);

    在适配器类中添加这个

    private Context context;
    public AdapterDatos(ArrayList<ClaseNueva> listaLugares,Context context) {
    this.context=context;
    listalugares = listaLugares;
    }
    

    现在,您可以像这样在适配器的onBindViewHolder 中调用 startactivity

    Intent myIntent = new Intent(context, MapsActivity.class);
    context.startActivity(myIntent);
    

    【讨论】:

    • 天啊!!!它确实有效!非常感谢你,我是该网站的新手,告诉我我能做些什么来奖励你,我非常感谢你花时间在我的问题上。再次非常感谢你,我将等待你关于如何在网站上奖励你的答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多