gpt4 book ai didi

java - 想要使用 float 操作按钮将项目添加到 ViewPager2 中包含的特定 fragment 中的回收 View

转载 作者:太空宇宙 更新时间:2023-11-04 09:05:54 25 4
gpt4 key购买 nike

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

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

为了节省空间,下面仅显示 7 个 fragment 类别中的 5 个。它们都是根据星期几来计算的。星期一、星期二、星期三、星期四、星期五引用这前 5 个 fragment 类。

代码:

将药物添加到列表类

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

} });

}
}

第二 fragment 类

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);
}
});
}
}

第三 fragment 类

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);
}
});
}
}

第四 fragment 类

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);
}
});
}
}

FifthFragment 类

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);
}
});
}
}

ViewPager适配器

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

}
}

回收器 View 适配器

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() 。

关于java - 想要使用 float 操作按钮将项目添加到 ViewPager2 中包含的特定 fragment 中的回收 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60236244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com