繁体   English   中英

想要使用浮动操作按钮将项目添加到 ViewPager2 中包含的特定片段中的回收视图

[英]Want to use a floating action button that adds an item to a recyclerview in a specific fragment that is contained in a ViewPager2

我在尝试在 viewpager2 中跨多个页面(由片段表示)实现多个回收视图时遇到了很多麻烦,我想使用一个浮动操作按钮,单击该按钮时,会支撑一个页面,用户可以在其中输入可以输入数据的页面最终被添加到 viewpager 上特定页面内的 recyclerview。 Viewpager2 应用了标签布局,标签为“星期一”到“星期日”。 我似乎无法通过活动“activity_add_medication_to_list”添加到回收视图。 有一长段代码有 7 个意图,用于表示添加到药物列表中。 该项目本质上是一个医疗调度/跟踪应用程序。 对于一周中的每一天,我都希望能够将特定药物添加到列表中并能够清晰地看到它。 有七个片段代表一周中的每一天。 FirstFragment 代表星期一,SecondFragment 代表星期二,等等。我还有一个 recyclerviewAdapter 类和一个 ViewPagerAdapter 类,代表多个 recyclerviews 和 viewPager2 的适配器。

主要问题:单击浮动操作按钮并输入我的数据后,它没有添加到任何页面的 recyclerview 的末尾(由 FirstFragment 类表示)。 我错过了什么,不允许我看到任何回收者视图的可见项目列表? 如何将回收站视图正确集成到片段中,以便我可以使用浮动操作按钮更新回收站视图?

为了节省空间,下面仅显示了 7 个片段类中的 5 个。 它们都是根据星期几的。 星期一、星期二、星期三、星期四、星期五是指这前 5 个片段类。

代码:

将药物添加到 List 类

package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;


import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class add_medication_to_list extends AppCompatActivity {

    String name;
    String time;
    int quantity;
    int dosage;
    String dayOfWeek;
    EditText nameInput;
    EditText timeInput;
    EditText quantityInput;
    EditText dosageInput;
    EditText dayOfWeekInput;
    Button add;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_medication_to_list);
        nameInput =  findViewById(R.id.medicine_name);
        timeInput =  findViewById(R.id.time);
        quantityInput =  findViewById(R.id.medicine_quantity);
        dosageInput = findViewById(R.id.dosage);
        dayOfWeekInput = findViewById(R.id.dayOfWeek);
        add =  findViewById(R.id.addButton);


        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                name = nameInput.getText().toString();
                time = timeInput.getText().toString();
                quantity = Integer.parseInt(quantityInput.getText().toString());
                dosage = Integer.parseInt(dosageInput.getText().toString());
                dayOfWeek = dayOfWeekInput.getText().toString();

                // setResult(RESULT_OK);
                    if (dayOfWeek.equalsIgnoreCase("monday")) {
                        FirstFragment.add_new_item(name, time, quantity, dosage);
                        Intent new_activity = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(new_activity);
                    } else if (dayOfWeek.equalsIgnoreCase("tuesday")) {
                        SecondFragmentClass.add_new_item(name, time, quantity, dosage);
                        Intent new_activity = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(new_activity);
                    } else if (dayOfWeek.equalsIgnoreCase("wednesday")) {
                        ThirdFragment.add_new_item(name, time, quantity, dosage);
                        Intent new_activity = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(new_activity);
                    } else if (dayOfWeek.equalsIgnoreCase("thursday")) {
                        FourthFragment.add_new_item(name, time, quantity, dosage);
                        Intent new_activity = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(new_activity);
                    } else if (dayOfWeek.equalsIgnoreCase("friday")) {
                        FifthFragment.add_new_item(name, time, quantity, dosage);
                        Intent new_activity = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(new_activity);
                    } else if (dayOfWeek.equalsIgnoreCase("saturday")) {
                        SixthFragment.add_new_item(name, time, quantity, dosage);
                        Intent new_activity = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(new_activity);
                    } else if (dayOfWeek.equalsIgnoreCase("sunday")) {
                        SeventhFragment.add_new_item(name, time, quantity, dosage);
                        Intent new_activity = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(new_activity);
                    }
                }

        });
    }
}

FirstFragment 类

package com.example.myapplication;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.ArrayList;

public class FirstFragment extends Fragment {
    private static final String ARG_COUNT = "param1";
    private Integer counter;
    private static Context context;
    private int[] COLOR_MAP = {
            R.color.red_100, R.color.red_300, R.color.red_500, R.color.red_700, R.color.blue_100,
            R.color.blue_300, R.color.blue_500, R.color.blue_700, R.color.green_100, R.color.green_300,
            R.color.green_500, R.color.green_700
    };
    private RecyclerView myRecyclerView;
    private static ArrayList<Medicine> medlist;
    private static recyclerViewAdapter anAdapter;
    private static int positionCounter;
    View view;
    public FirstFragment() {
        // Required empty public constructor
    }

    public static void add_new_item(String name, String time, int quantity, int dosage) {
        medlist.add(new Medicine(name, time, quantity, dosage, R.drawable.resized_pill));
        anAdapter.notifyItemInserted(medlist.size()-1);
        //anAdapter.notifyDataSetChanged();
    }

    public void onAttach(Context context) {
        super.onAttach(context);
        this.context = context;
    }


    public static FirstFragment newInstance(Integer counter) {
        FirstFragment fragment = new FirstFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_COUNT, counter);
        fragment.setArguments(args);
        return fragment;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            counter = getArguments().getInt(ARG_COUNT);
        }
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_card, container, false);
        return v;
    }
    @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        view.setBackgroundColor(ContextCompat.getColor(context, COLOR_MAP[counter]));
        FloatingActionButton new_button = view.findViewById(R.id.actionFloatingButton);
        medlist = new ArrayList<>();
        positionCounter = 0;
        myRecyclerView = view.findViewById(R.id.prescription_list);
        myRecyclerView.setHasFixedSize(true);
        anAdapter = new recyclerViewAdapter(getContext(), medlist);
        myRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        myRecyclerView.setAdapter(anAdapter);

        new_button.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent new_activity = new Intent(context, add_medication_to_list.class);
                startActivity(new_activity);

        } });

}
    }

第二片段类

package com.example.myapplication;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.ArrayList;

public class SecondFragmentClass extends Fragment {

    private static final String ARG_COUNT = "param1";
    private Integer counter;
    private static Context context;
    private int[] COLOR_MAP = {
            R.color.red_100, R.color.red_300, R.color.red_500, R.color.red_700, R.color.blue_100,
            R.color.blue_300, R.color.blue_500, R.color.blue_700, R.color.green_100, R.color.green_300,
            R.color.green_500, R.color.green_700
    };
    private RecyclerView myRecyclerView;
    private static ArrayList<Medicine> medlist;
    private static recyclerViewAdapter anAdapter;
    private static int positionCounter;

    public static void add_new_item(String name, String time, int quantity, int dosage) {
        medlist.add(new Medicine(name, time, quantity, dosage, R.drawable.resized_pill));
        anAdapter.notifyItemInserted(medlist.size()-1);
        //anAdapter.notifyDataSetChanged();
        positionCounter++;

    }

    public static SecondFragmentClass newInstance(Integer counter) {
        SecondFragmentClass fragment = new SecondFragmentClass();
        Bundle args = new Bundle();
        args.putInt(ARG_COUNT, counter);
        fragment.setArguments(args);
        return fragment;
    }

    public void onAttach(Context context) {
        super.onAttach(context);
        this.context = context;
        positionCounter = 0;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            counter = getArguments().getInt(ARG_COUNT);
        }
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_card_2, container, false);
        return v;
    }
    @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        view.setBackgroundColor(ContextCompat.getColor(context, COLOR_MAP[counter]));
        FloatingActionButton new_button = view.findViewById(R.id.actionFloatingButton);
        positionCounter = 0;
        medlist = new ArrayList<>();
        myRecyclerView = view.findViewById(R.id.prescription_list_2);
        anAdapter = new recyclerViewAdapter(getContext(), medlist);
        myRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        myRecyclerView.setAdapter(anAdapter);

        new_button.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent new_activity = new Intent(context, add_medication_to_list.class);
                startActivity(new_activity);
            }
        });
    }
}

第三片段类

package com.example.myapplication;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.ArrayList;

public class ThirdFragment extends Fragment {

    private static final String ARG_COUNT = "param1";
    private Integer counter;
    private static Context context;
    private int[] COLOR_MAP = {
            R.color.red_100, R.color.red_300, R.color.red_500, R.color.red_700, R.color.blue_100,
            R.color.blue_300, R.color.blue_500, R.color.blue_700, R.color.green_100, R.color.green_300,
            R.color.green_500, R.color.green_700
    };
    private RecyclerView myRecyclerView;
    private static ArrayList<Medicine> medlist = new ArrayList<>();
    private static recyclerViewAdapter anAdapter = new recyclerViewAdapter(context, medlist);
    private static int positionCounter;

    public static void add_new_item(String name, String time, int quantity, int dosage) {
        medlist.add(new Medicine(name, time, quantity, dosage, R.drawable.resized_pill));
        anAdapter.notifyItemInserted(medlist.size()-1);
        //anAdapter.notifyDataSetChanged();
        positionCounter++;

    }

    public static ThirdFragment newInstance(Integer counter) {
        ThirdFragment fragment = new ThirdFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_COUNT, counter);
        fragment.setArguments(args);
        return fragment;
    }

    public void onAttach(Context context) {
        super.onAttach(context);
        this.context = context;
        positionCounter = 0;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            counter = getArguments().getInt(ARG_COUNT);
        }
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_card_3, container, false);
        return v;
    }
    @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        view.setBackgroundColor(ContextCompat.getColor(context, COLOR_MAP[counter]));
        FloatingActionButton new_button = view.findViewById(R.id.actionFloatingButton);
        positionCounter = 0;
        medlist = new ArrayList<>();
        myRecyclerView = view.findViewById(R.id.prescription_list_3);
        myRecyclerView.setHasFixedSize(true);
        anAdapter = new recyclerViewAdapter(getContext(), medlist);
        myRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        myRecyclerView.setAdapter(anAdapter);

        new_button.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent new_activity = new Intent(context, add_medication_to_list.class);
                startActivity(new_activity);
            }
        });
    }
}

第四片段类

package com.example.myapplication;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.ArrayList;

public class FourthFragment extends Fragment {

    private static final String ARG_COUNT = "param1";
    private Integer counter;
    private static Context context;
    private int[] COLOR_MAP = {
            R.color.red_100, R.color.red_300, R.color.red_500, R.color.red_700, R.color.blue_100,
            R.color.blue_300, R.color.blue_500, R.color.blue_700, R.color.green_100, R.color.green_300,
            R.color.green_500, R.color.green_700
    };
    private RecyclerView myRecyclerView;
    private static ArrayList<Medicine> medlist;
    private static recyclerViewAdapter anAdapter;
    private static int positionCounter;

    public static void add_new_item(String name, String time, int quantity, int dosage) {
        medlist.add(new Medicine(name, time, quantity, dosage, R.drawable.resized_pill));
        anAdapter.notifyItemInserted(medlist.size()-1);
        //anAdapter.notifyDataSetChanged();
        positionCounter++;

    }

    public static FourthFragment newInstance(Integer counter) {
        FourthFragment fragment = new FourthFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_COUNT, counter);
        fragment.setArguments(args);
        return fragment;
    }

    public void onAttach(Context context) {
        super.onAttach(context);
        this.context = context;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            counter = getArguments().getInt(ARG_COUNT);
        }
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_card_4, container, false);
        return v;
    }
    @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        view.setBackgroundColor(ContextCompat.getColor(context, COLOR_MAP[counter]));
        FloatingActionButton new_button = view.findViewById(R.id.actionFloatingButton);
        myRecyclerView = view.findViewById(R.id.prescription_list_4);
        positionCounter = 0;
        medlist = new ArrayList<>();
        anAdapter = new recyclerViewAdapter(getContext(), medlist);
        myRecyclerView.setHasFixedSize(true);
        myRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        myRecyclerView.setAdapter(anAdapter);

        new_button.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent new_activity = new Intent(context, add_medication_to_list.class);
                startActivity(new_activity);
            }
        });
    }
}

第五片段类

package com.example.myapplication;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.ArrayList;

public class FifthFragment extends Fragment {

    private static final String ARG_COUNT = "param1";
    private Integer counter;
    private static Context context;
    private int[] COLOR_MAP = {
            R.color.red_100, R.color.red_300, R.color.red_500, R.color.red_700, R.color.blue_100,
            R.color.blue_300, R.color.blue_500, R.color.blue_700, R.color.green_100, R.color.green_300,
            R.color.green_500, R.color.green_700
    };
    private  RecyclerView myRecyclerView;
    private  static ArrayList<Medicine> medlist;
    private  static recyclerViewAdapter anAdapter;
    private static int positionCounter;

    public static void add_new_item(String name, String time, int quantity, int dosage) {
        medlist.add(new Medicine(name, time, quantity, dosage, R.drawable.resized_pill));
        anAdapter.notifyItemInserted(medlist.size()-1);
        //anAdapter.notifyDataSetChanged();
        positionCounter++;

    }

    public static FifthFragment newInstance(Integer counter) {
        FifthFragment fragment = new FifthFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_COUNT, counter);
        fragment.setArguments(args);
        return fragment;
    }

    public void onAttach(Context context) {
        super.onAttach(context);
        this.context = context;
        positionCounter = 0;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            counter = getArguments().getInt(ARG_COUNT);
            positionCounter = 0;

        }
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_card_5, container, false);
        return v;
    }
    @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        view.setBackgroundColor(ContextCompat.getColor(context, COLOR_MAP[counter]));
        FloatingActionButton new_button = view.findViewById(R.id.actionFloatingButton);
        medlist = new ArrayList<>();
        positionCounter = 0;
        myRecyclerView = view.findViewById(R.id.prescription_list_5);
        myRecyclerView.setHasFixedSize(true);
        anAdapter = new recyclerViewAdapter(getContext(), medlist);
        myRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        myRecyclerView.setAdapter(anAdapter);

        new_button.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent new_activity = new Intent(context, add_medication_to_list.class);
                startActivity(new_activity);
            }
        });
    }
}

ViewPagerAdapter

package com.example.myapplication;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;

import java.util.ArrayList;

public class ViewPagerAdapter extends FragmentStateAdapter {
    private static final int CARD_ITEM_SIZE = 7;
    private ArrayList<Fragment> arrayList = new ArrayList<>();
    public ViewPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
        super(fragmentActivity);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return arrayList.get(position);
    }

    @Override public int getItemCount() {
        return CARD_ITEM_SIZE;
    }

    public void addFragment(Fragment fragment) {
        arrayList.add(fragment);

    }
}

回收器视图适配器

package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

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

    Context data;
    List<Medicine> new_list;

    public recyclerViewAdapter(Context data, List<Medicine> new_list) {
        this.data = data;
        this.new_list = new_list;
    }

    public recyclerViewAdapter() {
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(data).inflate(R.layout.new_items, parent, false);
        MyViewHolder view = new MyViewHolder(v);
        return view;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

        holder.new_name.setText(new_list.get(position).getName());
        holder.new_quantity.setText(Integer.toString(new_list.get(position).getFrequency()));
        holder.new_image.setImageResource(new_list.get(position).getPhoto());
        holder.new_time.setText(new_list.get(position).getTime());

    }

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

    public static class MyViewHolder extends RecyclerView.ViewHolder {

        private TextView new_name;
        private TextView new_quantity;
        private ImageView new_image;
        private TextView  new_time;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            new_name = itemView.findViewById(R.id.prescription_name);
            new_image = itemView.findViewById(R.id.new_image);
            new_quantity = itemView.findViewById(R.id.quantity_items);
            new_time = itemView.findViewById(R.id.new_time);

        }

    }
}

医学课

package com.example.myapplication;

public class Medicine {

    private String name_of_medicine, time_to_take;
    private int quantity_remaining, Photo, frequency, dosage;

    public Medicine(String name_of_medicine, String time_to_take, int quantity, int dosage, int photo) {
        this.name_of_medicine = name_of_medicine;
        this.time_to_take = time_to_take;
        this.quantity_remaining = quantity;
        this.dosage = dosage;
        Photo = photo;
    }

    public String getName()
    {
        return name_of_medicine;
    }
    public String getTime()
    {
        return time_to_take;
    }
    public int getFrequency() {
        return quantity_remaining;
    }
    public int getPhoto() {
        return Photo;
    }
}

解决了这个问题。 在调用 add_new_item() 方法后使用 finish()。

暂无
暂无

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

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