【问题标题】:How to open few different activites on recyclerview different item click using if or case method?如何使用 if 或 case 方法在 recyclerview 不同的项目点击上打开几个不同的活动?
【发布时间】:2020-04-15 09:47:57
【问题描述】:

我目前在片段中使用回收器视图。我的回收站视图列表中有 4 个项目。现在我想使用 if/case 方法打开 4 个新的不同活动。但是我可以根据他们的职位打开一项活动,而无法打开其他活动。这是我的 RecyclerViewAdapter java 代码。 另外请让我知道在点击监听器上打开的最佳做法。

    package com.kidslearning.course.adapter;

    import android.content.Context;
    import android.content.Intent;
    import android.media.Image;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;

    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.recyclerview.widget.RecyclerView;

    import com.kidslearning.course.NewHindiActivity;
    import com.kidslearning.course.R;
    import com.kidslearning.course.fragment.EnglishFragment;
    import com.kidslearning.course.fragment.HindiFragment;
    import com.kidslearning.course.fragment.MathFragment;
    import com.kidslearning.course.model.HindiFragmentModel;

    import java.util.List;

    public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {

        Context mContext;
        List<HindiFragmentModel> mData;
        private MathFragment MathFragment;

        public RecyclerViewAdapter(Context mContext, List<HindiFragmentModel> mData) {
            this.mContext = mContext;
            this.mData = mData;
        }

        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

            View v;
            v = LayoutInflater.from(mContext).inflate(R.layout.fragmentdesign,parent,false);
            MyViewHolder vHolder = new MyViewHolder(v);
            mContext = v.getContext();

            return vHolder;
        }

        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
            holder.tv_name.setText(mData.get(position).getName());
            holder.img.setImageResource(mData.get(position).getPhoto());

            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(v.getContext(), NewHindiActivity.class);
                    v.getContext().startActivity(intent);

       //now I want to open other activity by clicking on 2nd recycler view item.    

                }
            });

        }

        @Override
        public int getItemCount() {
            return mData.size();
        }

        public static class MyViewHolder extends RecyclerView.ViewHolder {
            private TextView tv_name;
            private ImageView img;
            public MyViewHolder(@NonNull View itemView) {
                super(itemView);
                tv_name = (TextView) itemView.findViewById(R.id.titleView);
                img = (ImageView) itemView.findViewById(R.id.imageView);
            }

        }

    }

【问题讨论】:

    标签: android android-fragments android-activity android-recyclerview onclicklistener


    【解决方案1】:

    这是您的onClick() 代码

    holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    if (position == 0) {
                        Intent intent = new Intent(v.getContext(), FirstActivity.class);
                        mContext.startActivity(intent);
                    } else if (position == 1) {
                        Intent intent = new Intent(v.getContext(), SecondActivity.class);
                        mContext.startActivity(intent);
                    } else if (position == 2) {
                        Intent intent = new Intent(v.getContext(), ThirdActivity.class);
                        mContext.startActivity(intent);
                    } else if (position == 3) {
                        Intent intent = new Intent(v.getContext(), FourthActivity.class);
                        mContext.startActivity(intent);
                    }
    
    
                }
            });
    

    【讨论】:

      【解决方案2】:

      将此代码添加到onClick项目中

      Intent intent;
          switch(position) {
              case 0:
                  intent = new Intent(v.getContext(), NewHindiActivity.class);
                  v.getContext().startActivity(intent);
              break;
              case 1:
                  intent = new Intent(v.getContext(), SecondActivity.class);
                  v.getContext().startActivity(intent);
                  break;
              default:
      
                  break;
          }
      

      【讨论】:

        【解决方案3】:

        如果您不想使用 if/case 语句,您也可以添加到模型目标页面,例如:

        class HindiFragmentModel {
        ...
        private Activity pageToGo;
        ...
        public Activity getPageToGo() {
            return pageToGo; }
        
        public void setPageToGo(Activity pageToGo) {
            this.pageToGo = pageToGo; }
        }
        

        二传手使用:

        yourHindiFragmentModelObject.setPageToGo(new DestinationActivity())
        

        最后在适配器中:

        holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(v.getContext(), mData.get(position).getPageToGo().getClass());
                    v.getContext().startActivity(intent);   
                }
            });
        

        【讨论】:

        • 我可以使用以下方法打开其他活动...或者它只会打开一个活动----- Setter 使用:yourHindiFragmentModelObject.setPageToGo(new DestinationActivity1()) yourHindiFragmentModelObject.setPageToGo(new DestinationActivity2() ) yourHindiFragmentModelObject.setPageToGo(new DestinationActivity3()) yourHindiFragmentModelObject.setPageToGo(new DestinationActivity4())
        • 在您创建数据列表的地方,您需要为正确的对象设置目标活动。例如,对于第一项,它将是例如“new NewHindiActivity()”
        猜你喜欢
        • 2020-07-28
        • 1970-01-01
        • 1970-01-01
        • 2023-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-02
        相关资源
        最近更新 更多