首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击按钮时,将多个值从recyclerview传递到主活动

单击按钮时,将多个值从recyclerview传递到主活动
EN

Stack Overflow用户
提问于 2020-04-13 20:09:05
回答 2查看 74关注 0票数 0

我在一个健身房应用程序上工作,项目显示为below.There是添加按钮和布局中的下一步按钮。当我点击回收器视图中的add按钮时,按钮的文本变为added,remove按钮可见,如下图所示。现在,当我单击next按钮时,所有添加的项目文本都必须传递给我的mainActivity。

我不知道该怎么做。here is image

这是我的recyclerviewAdapter

代码语言:javascript
复制
public class myAdapter extends RecyclerView.Adapter<myAdapter.MyView> {
private ArrayList<String> ex_name;
private ArrayList<Integer> ex_img;
private Context context;


public myAdapter(ArrayList<String> ex_name, ArrayList<Integer> ex_img, Context context) {
    this.ex_name = ex_name;
    this.ex_img = ex_img;
    this.context = context;
}


@NonNull
@Override
public myAdapter.MyView onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view, parent, false);
    return new MyView(v);
}

@Override
public void onBindViewHolder(@NonNull myAdapter.MyView holder, int position) {
    holder.ex_name.setText(ex_name.get(position));
    holder.ex_img.setImageResource(ex_img.get(position));
}

@Override
public int getItemCount() {

    return ex_name.size();
}


public class MyView extends RecyclerView.ViewHolder {
    public TextView ex_name;
    public ImageView ex_img;
    public Button add, remove;

    public MyView(@NonNull View itemView) {
        super(itemView);
        ex_name = itemView.findViewById(R.id.card_exeName);
        ex_img = itemView.findViewById(R.id.card_exeImg);
        add = itemView.findViewById(R.id.add_btn);
        remove = itemView.findViewById(R.id.remove_btn);

        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                add.setText("Added");
                remove.setVisibility(View.VISIBLE);


            }
        });
        remove.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                remove.setVisibility(View.INVISIBLE);
                add.setText("Add");

            }
        });

    }
}

这是我的MainActivity

代码语言:javascript
复制
  private RecyclerView recycler_view;
private RecyclerView.Adapter adapter;
private ArrayList<String> ex_name;
private ArrayList<Integer> ex_img;
private String select_ex_name;

Intent intent;
TextView exName;
Button next;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_exercise);
    exName = findViewById(R.id.exe_name);
    next = findViewById(R.id.next_btn);
    intent = getIntent();
    ex_name = new ArrayList<>();
    ex_img = new ArrayList<Integer>();
    select_ex_name = intent.getStringExtra("Excercise_name");

    if (select_ex_name.equals("biceps")) {
        exName.setText("Biceps");
        ex_name.add("Fat-Grip Hammer Curl");
        ex_img.add(R.drawable.bicpes_1);
        ex_name.add("EZ-Bar Preacher Curl");
        ex_img.add(R.drawable.biceps_2);
        ex_name.add("Reverse Curl");
        ex_img.add(R.drawable.biceps_3);
        ex_name.add("Wide-Grip Curl");
        ex_img.add(R.drawable.biceps_4);
        ex_name.add("Close-Grip Curl");
        ex_img.add(R.drawable.biceps_5);
        ex_name.add("Hammer Curl");
        ex_img.add(R.drawable.biceps_6);
        ex_name.add("Dip");
        ex_img.add(R.drawable.biceps_7);
        ex_name.add("Behind-the-Back Cable Curl");
        ex_img.add(R.drawable.biceps_8);
        ex_name.add("Side Curl with Band");
        ex_img.add(R.drawable.biceps_9);

    } else if (select_ex_name.equals("chest")) {
        exName.setText("Chest");
        ex_name.add("Barbell Bench Press");
        ex_img.add(R.drawable.chest_1);
        ex_name.add("Dumbbell Bench Press");
        ex_img.add(R.drawable.chest_2);
        ex_name.add("Smith Machine Incline Press");
        ex_img.add(R.drawable.chest_3);
        ex_name.add("Incline Dumbbell Flye");
        ex_img.add(R.drawable.chest_4);
        ex_name.add("Cable Crossover");
        ex_img.add(R.drawable.chest_5);
        ex_name.add("Incline Dumbbell Press");
        ex_img.add(R.drawable.chest_6);
        ex_name.add("Chest Press Machine");
        ex_img.add(R.drawable.chest_7);
        ex_name.add("Dumbbell Flye");
        ex_img.add(R.drawable.chest_8);
        ex_name.add("Low-Cable Crossover");
        ex_img.add(R.drawable.chest_9);
    } else if (select_ex_name.equals("back")) {
        exName.setText("Back");
        ex_name.add("Deadlift");
        ex_img.add(R.drawable.back_1);
        ex_name.add(" Incline Dumbbell Row");
        ex_img.add(R.drawable.back_2);
        ex_name.add("Trap-Bar Deadlift");
        ex_img.add(R.drawable.back_3);
        ex_name.add("Cable Row");
        ex_img.add(R.drawable.back_4);
        ex_name.add("Yates Row");
        ex_img.add(R.drawable.back_5);
        ex_name.add(" Bentover Row to Neck");
        ex_img.add(R.drawable.back_6);
        ex_name.add("Close-Grip Pull-Down");
        ex_img.add(R.drawable.back_7);
        ex_name.add(" Single-Arm Dumbbell Row");
        ex_img.add(R.drawable.back_8);


    } else if (select_ex_name.equals("triceps")) {
        exName.setText("Triceps");
        ex_name.add("Diamond Pushup");
        ex_img.add(R.drawable.tri_1);
        ex_name.add("Neutral-Grip Triceps Extension");
        ex_img.add(R.drawable.tri_2);
        ex_name.add("Reverse Curl");
        ex_img.add(R.drawable.tri_3);
        ex_name.add("Pullover/Triceps Extension");
        ex_img.add(R.drawable.tri_4);
        ex_name.add("Decline Triceps Extension");
        ex_img.add(R.drawable.tri_5);
        ex_name.add("Close-Grip Bench Press");
        ex_img.add(R.drawable.tri_6);
        ex_name.add(" Lying Triceps Extension");
        ex_img.add(R.drawable.tri_7);
        ex_name.add("Underhand Kickback");
        ex_img.add(R.drawable.tri_8);

    } else if (select_ex_name.equals("legs")) {
        exName.setText("Legs");
        ex_name.add("Leg Press");
        ex_img.add(R.drawable.legs1);
        ex_name.add("Pause Squat");
        ex_img.add(R.drawable.leg_2);
        ex_name.add("Reverse Lunge");
        ex_img.add(R.drawable.leg_3);
        ex_name.add("Dumbbell Squat");
        ex_img.add(R.drawable.leg_4);
        ex_name.add("Barbell Hip Thrust");
        ex_img.add(R.drawable.leg_5);
        ex_name.add("Seated Calf Raise");
        ex_img.add(R.drawable.leg_6);
        ex_name.add("Front Squat");
        ex_img.add(R.drawable.leg_7);
        ex_name.add("Romanian Deadlift");
        ex_img.add(R.drawable.leg_8);
        ex_name.add("Squart");
        ex_img.add(R.drawable.leg_9);
    } else if (select_ex_name.equals("shoulder")) {
        exName.setText("Shoulder");
        ex_name.add("Barbell Overhead Press");
        ex_img.add(R.drawable.shoulder_1);
        ex_name.add("Standing Dumbbell Fly");
        ex_img.add(R.drawable.shoulder_2);
        ex_name.add(" Face Pull");
        ex_img.add(R.drawable.shoulder_3);
        ex_name.add("High Pull");
        ex_img.add(R.drawable.shoulder_4);
        ex_name.add("Seated Dumbbell Clean");
        ex_img.add(R.drawable.shoulder_5);
        ex_name.add(" Clean and Press");
        ex_img.add(R.drawable.shoulder_6);
        ex_name.add("Snatch-Grip High Pull");
        ex_img.add(R.drawable.shoulder_7);
        ex_name.add("Machine Shoulder Press");
        ex_img.add(R.drawable.shoulder_8);

    }
    recycler_view = findViewById(R.id.recyclerView);
    recycler_view.setHasFixedSize(true);
    recycler_view.setLayoutManager(new LinearLayoutManager(this));
    adapter = new myAdapter(ex_name, ex_img, exerciseActivity.this);
    recycler_view.setAdapter(adapter);
    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-13 20:38:21

首先,您可以考虑使用json文件资产来实例化不同的列表。这将使编辑您的项目在未来更容易。

接下来,你应该考虑使用片段和导航,因为你的应用程序可能有几个屏幕,需要将信息从一个屏幕传输到另一个屏幕。

通过使用上面提到的代码将简单数据从一个屏幕转换到另一个屏幕,代码将如下所示

代码语言:javascript
复制
findNavController().navigate(R.id.action_screenA_to_screenB,bundleOf(Pair("selected_items", selected) // where selected might be an array 

但现在我们来看看真正的东西。

我认为这将导致应用程序状态,因此必须在中心位置跟踪您的状态,以便在应用程序中的任何位置显示。

因此,要做到这一点,您不需要将数据直接转换到下一个屏幕,更好的方法是将数据移动到模型中。

这样,任何需要更改数据的选择或操作都将在模型上完成。现在模型已经有了必须完成的所有操作。你可以改变屏幕,甚至不需要将数据传输到下一个屏幕。

但你可能会问,我如何做到这一点呢?深吸一口气,这里有一个指向指南的链接,这些指南可能会解决你的问题,让你的应用程序易于维护。

Navigation using Navigation controller

Using a shared viewmodel to exchange data between fragments

最后:Using Lifecycleobserver to load and save your data

票数 0
EN

Stack Overflow用户

发布于 2020-04-13 20:21:43

在onBindViewHolder()中,创建一个setOnClicklisterner,并通过setOnclicklisterner创建intent,然后将信息发送到mainactivity。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61187568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档