位置に依存しないrecyclerviewにOnClickListenerを設定する方法

クリスティアーノロナウド:

entidad1、entidad2またはentidad3:私はonclicklistenerメソッドは、オブジェクトに関連した活動を開きたいです。

私はそれがentidad1が表示されたら、今、それはすべて私がかかるので、それは、Xの活動に、そしてentidad2の表示された場合はY活動にので、それを行う方法のいずれかのアイデアを私を取ることにしたいMainActivity.javaにOnRecipe方法entidad1の活動までの時間。私はそれが位置するのではなく、開くことかを決定するために優先順位を使用して関連していなければならないと思います。

それは私のアダプターです。

package com.test.platos_4;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import java.util.List;

public class Adaptador2  extends RecyclerView.Adapter<Adaptador2.ViewHolder>
{
    private List<Entidad2> listItems;
    private OnRecipeListener mOnRecipeListener;

    public  Adaptador2(List<Entidad2> listItems, OnRecipeListener onRecipeListener) {
        this.listItems = listItems;
        this.mOnRecipeListener = onRecipeListener;
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.elemento_lista2, parent, false);
        return new ViewHolder(view, mOnRecipeListener);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewholder, int position) {
        int resource = listItems.get(position).getImgFoto();
        String title = listItems.get(position).getTitulo();
        String time = listItems.get(position).getTiempo();
        int barra = listItems.get(position).getRating();
        //int fondo = listItems.get(position).getColorfondo();
        viewholder.setData(resource, title, time, barra);
        // por si necesito color de fondo viewholder.setData(resource, title, time, barra, fondo);
    }

    @Override
    public int getItemCount() {
        return listItems.size();
    }
    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private ImageView imgFoto;
        private TextView titulo;
        private TextView tiempo;
        private RatingBar ratingBar;
        //private ImageView colorfondo;
        OnRecipeListener onRecipeListener;

        public ViewHolder(View itemView, OnRecipeListener onRecipeListener) {
            super(itemView);

            imgFoto = itemView.findViewById(R.id.imgFoto);
            titulo = itemView.findViewById(R.id.tvTitulo);
            tiempo = itemView.findViewById(R.id.tvTiempo);
            ratingBar = itemView.findViewById(R.id.ratingBarVerd);
            //colorfondo = itemView.findViewById(R.id.colorfondo);
            this.onRecipeListener = onRecipeListener;

            itemView.setOnClickListener(this);
        }

        //por si necesito color de fondo private void setData(int resource, String title, String time, int barra, int fondo){
        private void setData(int resource, String title, String time, int barra){
            imgFoto.setImageResource(resource);
            titulo.setText(title);
            tiempo.setText(time);
            ratingBar.setRating(barra);
            //colorfondo.setImageResource(fondo);

        }

        @Override
        public void onClick(View v) {
            onRecipeListener.OnRecipe(getAdapterPosition());
        }
    }

    public interface OnRecipeListener{
        void OnRecipe(int priority);
    }
}

そして、それはMainActivity.javaです。

public class Comida extends AppCompatActivity implements Adaptador2.OnRecipeListener {
    private RecyclerView recyclerView1;
    List<Entidad2> listItems;
    Adaptador2 adaptor;
    private Entidad2 entidad1,entidad2,entidad3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_comida);

        recyclerView1 = findViewById(R.id.lv_1);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);

        recyclerView1.setLayoutManager(layoutManager);

        listItems = new ArrayList<>();
        entidad1 = new Entidad2(R.drawable.calabacines_3, "Solomillo a la plancha", " 10 min.", 4, 20);
        entidad2 = new Entidad2(R.drawable.patatas_deluxe_especiadas_70523_300_150, "Entrecot", " 15 min.", 2, 50);
        entidad3 = new Entidad2(R.drawable.tomate, "Hamburguesa", " 2 min.", 5, 100);


        listItems.add(entidad1);
        listItems.add(entidad2);
        listItems.add(entidad3);

        adaptor = new Adaptador2(listItems, this);
        recyclerView1.setAdapter(adaptor);
        adaptor.notifyDataSetChanged();
        pickEntidad();
    }
    @Override
    public void OnRecipe(int priority) {

        if (priority == 20) {
            Intent in = new Intent(this, Solomillo.class);
            startActivity(in);
        }
        if (priority == 50) {
            Intent in = new Intent(this, Entrecot.class);
            startActivity(in);
        }
        if (priority == 100) {
            Intent in = new Intent(this, Hamburguesa.class);
            startActivity(in);
        }
    }

    private void pickEntidad(){
        final int random = new Random().nextInt(101);

        int priority1 = entidad1.getPriority();
        int priority2 = entidad2.getPriority();
        int priority3 = entidad3.getPriority();


        listItems.clear();
        if(random < priority1){

            listItems.add(entidad1);

        }else if(random < priority2){

            listItems.add(entidad2);

        }else if (random <= priority3){

            listItems.add(entidad3);

        }
        adaptor.notifyDataSetChanged();
    }
}

そしてEntidad.java:

public class Entidad2 {

    private int imgFoto;
    private String titulo;
    private String tiempo;
    private int ratingBar;
    private int priority;
    private int d;


    public Entidad2(int imgFoto, String titulo, String tiempo, int ratingBar, int priority) {

        this.imgFoto = imgFoto;
        this.titulo = titulo;
        this.tiempo = tiempo;
        this.ratingBar = ratingBar;
        this.priority = priority;
    }

    public int getImgFoto() {
        return imgFoto;
    }

    public String getTitulo() {
        return titulo;
    }

    public String getTiempo() {
        return tiempo;
    }

    public int getRating() { return ratingBar; }

    public  int getPriority() {
        return  priority;
    }
}

問題を解決するために私を助けてください、あなたはより多くの情報が必要な場合だけで私はそれを掲載する予定を教えてください。

受注:

あなたは、優先順位によって、あなたのアイテムを区別しようとしているが、あなたはあなたの活動にごアダプタからのアイテムの位置を通過しています。あなたは、クリックした項目の優先順位の代わりに、その位置を渡す必要があります。私はあなたのAdaptor2クラスを変更しました

package com.test.platos_4;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import java.util.List;

public class Adaptador2  extends RecyclerView.Adapter<Adaptador2.ViewHolder>
{
private List<Entidad2> listItems;
private OnRecipeListener mOnRecipeListener;

public  Adaptador2(List<Entidad2> listItems, OnRecipeListener onRecipeListener) {
    this.listItems = listItems;
    this.mOnRecipeListener = onRecipeListener;
}


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.elemento_lista2, parent, false);
    return new ViewHolder(view, mOnRecipeListener);
}

@Override
public void onBindViewHolder(ViewHolder viewholder, int position) {
    Entidad2 entidad = listItems.get(position);
    int resource = entidad.getImgFoto();
    String title = entidad.getTitulo();
    String time = entidad.getTiempo();
    int barra = entidad.getRating();
    final int priority = entidad.getPriority();
    //int fondo = listItems.get(position).getColorfondo();
    viewholder.setData(resource, title, time, barra);

//You can pass the clicked item's priority back to your activity like this
    viewholder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    mOnRecipeListener.OnRecipe(priority);
        }
    });
    // por si necesito color de fondo viewholder.setData(resource, title, time, barra, fondo);
}

@Override
public int getItemCount() {
    return listItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    private ImageView imgFoto;
    private TextView titulo;
    private TextView tiempo;
    private RatingBar ratingBar;
    //private ImageView colorfondo;
    OnRecipeListener onRecipeListener;

    public ViewHolder(View itemView, OnRecipeListener onRecipeListener) {
        super(itemView);

        imgFoto = itemView.findViewById(R.id.imgFoto);
        titulo = itemView.findViewById(R.id.tvTitulo);
        tiempo = itemView.findViewById(R.id.tvTiempo);
        ratingBar = itemView.findViewById(R.id.ratingBarVerd);
        //colorfondo = itemView.findViewById(R.id.colorfondo);

        //This is useless
        //this.onRecipeListener = onRecipeListener;

    }

    //por si necesito color de fondo private void setData(int resource, String title, String time, int barra, int fondo){
    private void setData(int resource, String title, String time, int barra){
        imgFoto.setImageResource(resource);
        titulo.setText(title);
        tiempo.setText(time);
        ratingBar.setRating(barra);
        //colorfondo.setImageResource(fondo);

    }

    @Override
    public void onClick(View v) {

    }
}

public interface OnRecipeListener{
    void OnRecipe(int priority);
}
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=236202&siteId=1