简体   繁体   English

如何从内部的 ImageButton 开始另一个活动到 RecyclerView 中?

[英]How to start another activity from a ImageButton that it's inside into a RecyclerView?

I'm making an Android Studio project, for that I made a RecyclerView for the shopping list and everything was OK but now I need that when the customer clicks on a category, start the personal activity for that option.我正在制作一个 Android Studio 项目,为此我为购物清单制作了一个 RecyclerView 并且一切正常,但现在我需要在客户单击类别时启动该选项的个人活动。 The problem is that when I linked the customized activity for "Bebidas", all the buttons were involved.问题是,当我链接“Bebidas”的自定义活动时,所有按钮都涉及。 How can I make that only the category "Bebidas" can read that activity?我怎样才能使只有“Bebidas”类别可以阅读该活动? I hope someone can help me.我希望有一个人可以帮助我。 Thanks.谢谢。

Here is the MainActivity:这是主要活动:

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

} }

Here is the class:这是课程:

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

} }

Here is the adapter:这是适配器:

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

} }

Here the xml of the RecyclerView:这里是 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"/>

Here is the activity_main.xml:这是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"/>

IN ADAPTER 在适配器中

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

In ACTIVITY 活动中

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

I hope it helps you.!! 希望对您有帮助!!

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

        idImagen.setOnClickListener(new OnCLickListener(){
                 @Override
                 public void onCLick(View view){
                    view.getContext().startActivity(new Intent(view.getContext(), NewActivity.class));
                }
            });
        }
    }

As per your question you want to make click event of ImageButton which lies in Recyclerview.so,You can take Onclick() event As per below: 根据您的问题,要使ImageButton的click事件位于Recyclerview.so中,您可以按如下方式处理Onclick()事件:

 @Override
    public void onBindViewHolder(OrderDetailViewAdapter.MyViewHolder holder, int position) {
         nombre=(TextView) itemView.findViewById(R.id.idNombre);
         idImagen=(ImageButton) itemView.findViewById(R.id.idImagen);

         holder.idImagen.setOnClickListener(new View.OnClickListener() {
         @Override

         public void onClick(View view) {
         //put code of Whatever you want to do
         }
              }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM