java - 如何从位于 RecyclerView 内部的 ImageButton 启动另一个活动?
问题描述
我正在制作一个 Android Studio 项目,为此我为购物清单制作了一个 RecyclerView,一切正常,但现在我需要当客户点击一个类别时,启动该选项的个人活动。问题是,当我为“Bebidas”链接自定义活动时,所有按钮都涉及。我怎样才能使只有“Bebidas”类别才能阅读该活动?我希望有一个人可以帮助我。谢谢。
这是主要活动:
public class CategoriasActivity extends AppCompatActivity {
ArrayList<Categorias> listaCategorias;
RecyclerView recyclerCategorias;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_categorias);
listaCategorias=new ArrayList<>();
recyclerCategorias =(RecyclerView) findViewById(R.id.recyclerid);
//recycler.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
recyclerCategorias.setLayoutManager(new GridLayoutManager(this,2));
llenarCategorias();
AdaptadorCategorias adapter=new AdaptadorCategorias(listaCategorias);
adapter.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Toast.makeText(getApplicationContext(), "Selección: "+listaCategorias.get(recyclerCategorias.getChildAdapterPosition(view)).getNombre(), Toast.LENGTH_SHORT).show();
}
});
recyclerCategorias.setAdapter(adapter);
}
private void llenarCategorias(){
listaCategorias.add(new Categorias("Congelados",R.drawable.congelados));
listaCategorias.add(new Categorias("Bebidas", R.drawable.bebida));
listaCategorias.add(new Categorias("Panadería", R.drawable.panaderia));
listaCategorias.add(new Categorias("Pastelería", R.drawable.pasteleria));
}
public void onclick(View view) {
Intent intent=new Intent(getApplicationContext(), BebidasActivity.class);
startActivity(intent);
}
}
这是课程:
public class Categorias {
private String nombre;
//private String info;
private int foto;
public Categorias(String nombre, int foto){ //String info
this.nombre = nombre;
//this.info = info;
this.foto = foto;
}
public Categorias(){
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
/*public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}*/
public int getFoto() {
return foto;
}
public void setFoto(int foto) {
this.foto = foto;
}
}
这是适配器:
public class AdaptadorCategorias
extends RecyclerView.Adapter<AdaptadorCategorias.ViewHolderCategorias>implements View.OnClickListener {
ArrayList<Categorias> listaCategorias;
private View.OnClickListener listener;
public AdaptadorCategorias(ArrayList<Categorias> listaCategorias) {
this.listaCategorias = listaCategorias;
}
@Override
public ViewHolderCategorias onCreateViewHolder(ViewGroup parent, int viewType) {
View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.categorias_list, null, false);
view.setOnClickListener(this);
return new ViewHolderCategorias(view);
}
@Override
public void onBindViewHolder(ViewHolderCategorias holder, int position) {
//Asignamos los valores correspondientes a cada TextView
holder.nombre.setText(listaCategorias.get(position).getNombre());
//holder.info.setText(listaCategorias.get(position).getInfo());
holder.idImagen.setImageResource(listaCategorias.get(position).getFoto());
//Asignar eventos a los botones
}
@Override
public int getItemCount() {
return listaCategorias.size();
}
public void setOnClickListener(View.OnClickListener listener){
this.listener=listener;
}
@Override
public void onClick(View view) {
if (listener!=null){
listener.onClick(view);
}
}
public class ViewHolderCategorias extends RecyclerView.ViewHolder {
TextView nombre; //, info;
ImageButton idImagen;
public ViewHolderCategorias(View itemView) {
super(itemView);
nombre=(TextView) itemView.findViewById(R.id.idNombre);
//info=(TextView) itemView.findViewById(R.id.idInfo);
idImagen=(ImageButton) itemView.findViewById(R.id.idImagen);
}
}
}
这里是 RecyclerView 的 xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageButton
android:id="@+id/idImagen"
android:layout_width="112dp"
android:layout_height="111dp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:background="@android:color/transparent"
android:src="@drawable/bebida"
android:onClick="onclick"/>
<TextView
android:id="@+id/idNombre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Bebidas"
android:textSize="20sp"
android:textStyle="bold"
android:layout_marginBottom="10dp"/>
这是activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageButton
android:id="@+id/idImagen"
android:layout_width="112dp"
android:layout_height="111dp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:background="@android:color/transparent"
android:src="@drawable/bebida"
android:onClick="onclick"/>
<TextView
android:id="@+id/idNombre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Bebidas"
android:textSize="20sp"
android:textStyle="bold"
android:layout_marginBottom="10dp"/>
解决方案
在适配器中
private OnItemClickListener onItemClickListener;
@Override
public ViewHolderCategorias onCreateViewHolder(ViewGroup parent, int viewType) {
View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.categorias_list, null, false);
ViewHolderCategorias viewHolderCategorias = new ViewHolderCategorias(view);
// view.setOnClickListener(this);
viewHolderCategorias.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener != null) onItemClickListener.onItemClick(holder); //use CALL BACK
}
});
viewHolderCategorias.idImagen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener != null) onItemClickListener.onButton(holder); //use CALL BACK
}
});
return viewHolderCategorias;
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) { // Using with activity
this.onItemClickListener = onItemClickListener;
}
public interface OnItemClickListener { // CALL BACK
void onItemClick(RecyclerView.ViewHolder holder);
void onButton(RecyclerView.ViewHolder holder);
}
在活动中
adapter = new AnswerSheetAdapter(getContext());
adapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(RecyclerView.ViewHolder holder) {
// do SomeThing
}
@Override
public void onButton(RecyclerView.ViewHolder holder) {
// do SomeThing
}
});
希望对你有帮助。!!
推荐阅读
- apache - 本地主机拒绝连接。即使重启后我也无法访问本地主机
- angular - primeNG过滤不过滤数据
- c# - SQL 语句中的语法错误问题
- vb.net - 使用 DirectoryServices 的分发列表中的子列表
- java - 通过 JEE 应用程序中的注解触发 Spring 配置
- ios - 我可以在 AudioKit 中设置不是 2 的幂的 bufferLength 吗?
- java - Java泛型 - 带有接口绑定问题的通配符
- vue.js - 使用 v-if 使用 v-slot 属性在模板上设置条件
- android - 24/7 在前台运行 Flutter 应用程序
- android - SoundPool 和 MediaPlayer 音量对应问题