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