簡體   English   中英

單擊按鈕時,將多個值從 recyclerview 傳遞到主要活動

[英]pass multiple value from recyclerview to main activity when button is clicked

我正在開發一個健身房應用程序,項目顯示如下。布局中有添加按鈕和下一步按鈕。 當我單擊回收站視圖中的添加按鈕時,按鈕的文本更改為添加和刪除按鈕,如下圖所示。 現在,當我單擊下一個按鈕時,所有添加的項目文本都必須傳遞給我的 mainActivity。

我不知道該怎么做。 這是圖像

這是我的 recyclerviewAdapter

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

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

        }
    });
}

}

在 onBindViewHolder() 創建一個 setOnClicklisterner 並通過 setOnclicklisterner 創建意圖並將信息發送到 mainactivity。

首先,您可能會考慮使用 json 文件資產來實例化您的不同列表。 這將使將來更容易編輯您的項目。

接下來是您可能考慮使用片段和導航,因為您的應用程序可能有多個屏幕需要將信息從一個傳輸到另一個。

通過使用上面提到的代碼將簡單數據從一個屏幕傳輸到另一個屏幕,將如下所示

findNavController().navigate(R.id.action_screenA_to_screenB,bundleOf(Pair("selected_items", selected) // where selected might be an array 

但現在是真正的東西。

I thought that would result in an application state, so your state have to be tracked at an central position to be displayed at any position in your app.

因此,您不需要將數據直接傳輸到下一個屏幕,更好的方法是將數據移動到 model 中。

這樣,任何需要更改數據的選擇或操作都將在 model 上完成。 現在 model 已經完成了任何必須完成的操作。 您可以更改屏幕,甚至無需將數據傳輸到下一個屏幕。

但你可能會問,我該怎么做? 深呼吸,這里有一個指南鏈接,可以解決您的問題並讓您的應用程序易於維護。

導航使用導航 controller

使用共享視圖模型在片段之間交換數據

最后: 使用 Lifecycleobserver 加載和保存數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM