Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当导航回上一个片段时,数据正在复制_Java_Android_Android Fragments - Fatal编程技术网

Java 当导航回上一个片段时,数据正在复制

Java 当导航回上一个片段时,数据正在复制,java,android,android-fragments,Java,Android,Android Fragments,我在我的应用程序中使用导航组件我有两个片段一个片段项目列表,另一个显示项目的详细信息当用户单击片段1中的项目时,它会转到详细信息片段,当我切换回第一个片段时,所有列表再次重复 下面是我的代码: CakeFragment.java public class CakeFragment extends Fragment { List<AllCakes> allCakeList = new ArrayList<>(); AllCakesAdapter adapter; Bott

我在我的应用程序中使用导航组件我有两个片段一个片段项目列表,另一个显示项目的详细信息当用户单击片段1中的项目时,它会转到详细信息片段,当我切换回第一个片段时,所有列表再次重复

下面是我的代码:

CakeFragment.java

public class CakeFragment extends Fragment {

List<AllCakes> allCakeList = new ArrayList<>();
AllCakesAdapter adapter;
BottomNavigationView  navView;
FragmentCakeBinding fragmentCakeBinding;

public CakeFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    fragmentCakeBinding = FragmentCakeBinding.inflate(inflater,container,false);

    navView = getActivity().findViewById(R.id.navView);
    navView.setVisibility(View.GONE);

    getAllCakes();

    return fragmentCakeBinding.getRoot();
}

private void getAllCakes(){

    Retrofit retrofit = RetrofitClient.getInstance();
    ApiService apiService  = retrofit.create(ApiService.class);

    Call<List<AllCakes>> call = apiService.getAllCake();

    call.enqueue(new Callback<List<AllCakes>>() {
        @Override
        public void onResponse(Call<List<AllCakes>> call, Response<List<AllCakes>> response) {

            fragmentCakeBinding.cakeProgress.setVisibility(View.INVISIBLE);

            fragmentCakeBinding.allCakeRecycler.setHasFixedSize(true);
            fragmentCakeBinding.allCakeRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
            allCakeList.addAll(response.body());
            adapter = new AllCakesAdapter(getActivity(),allCakeList);
            fragmentCakeBinding.allCakeRecycler.setAdapter(adapter);
        }

        @Override
        public void onFailure(Call<List<AllCakes>> call, Throwable t) {

            fragmentCakeBinding.cakeProgress.setVisibility(View.INVISIBLE);
            TastyToast.makeText(getActivity(),t.getMessage(),TastyToast.LENGTH_SHORT,TastyToast.ERROR).show();
        }
    });
  }
}
public class AllCakesAdapter extends RecyclerView.Adapter<AllCakesAdapter.ViewHolder> {

Context context;
List<AllCakes> allCakeList;

public AllCakesAdapter(Context context, List<AllCakes> allCakeList) {
    this.context = context;
    this.allCakeList = allCakeList;
}

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

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

    AllCakes model = allCakeList.get(position);
    Glide.with(context).load(model.getImgurl()).into(holder.allCakeImg);
    holder.allCakeName.setText(model.getName());

    holder.cakeDisPrice.setPaintFlags(holder.cakeDisPrice.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

    holder.moreCake.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            NavController navController = Navigation.findNavController((Activity) context,R.id.fragment);
            navController.navigate(R.id.cakeDetailFragment);
        }
    });
}

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

public class ViewHolder extends RecyclerView.ViewHolder {

    ImageView allCakeImg;
    Button moreCake;
    TextView allCakeName;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        
        allCakeImg = itemView.findViewById(R.id.allCakeImg);
        moreCake = itemView.findViewById(R.id.moreCake);
        allCakeName = itemView.findViewById(R.id.allCakeName);
      }
   }
}
public class CakeDetailFragment extends Fragment {

FragmentCakeDetailBinding fragmentCakeDetailBinding;

public CakeDetailFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    fragmentCakeDetailBinding = FragmentCakeDetailBinding.inflate(inflater,container,false);



    return fragmentCakeDetailBinding.getRoot();
  }
} 
allCakeList.clear();
allCakeList.addAll(response.body());

//rest of the logic remains same

为什么会发生这种情况?

试试下面的方法,看看是否能解决您的问题

CakeFragment.java

public class CakeFragment extends Fragment {

List<AllCakes> allCakeList = new ArrayList<>();
AllCakesAdapter adapter;
BottomNavigationView  navView;
FragmentCakeBinding fragmentCakeBinding;

public CakeFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    fragmentCakeBinding = FragmentCakeBinding.inflate(inflater,container,false);

    navView = getActivity().findViewById(R.id.navView);
    navView.setVisibility(View.GONE);

    getAllCakes();

    return fragmentCakeBinding.getRoot();
}

private void getAllCakes(){

    Retrofit retrofit = RetrofitClient.getInstance();
    ApiService apiService  = retrofit.create(ApiService.class);

    Call<List<AllCakes>> call = apiService.getAllCake();

    call.enqueue(new Callback<List<AllCakes>>() {
        @Override
        public void onResponse(Call<List<AllCakes>> call, Response<List<AllCakes>> response) {

            fragmentCakeBinding.cakeProgress.setVisibility(View.INVISIBLE);

            fragmentCakeBinding.allCakeRecycler.setHasFixedSize(true);
            fragmentCakeBinding.allCakeRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
            allCakeList.addAll(response.body());
            adapter = new AllCakesAdapter(getActivity(),allCakeList);
            fragmentCakeBinding.allCakeRecycler.setAdapter(adapter);
        }

        @Override
        public void onFailure(Call<List<AllCakes>> call, Throwable t) {

            fragmentCakeBinding.cakeProgress.setVisibility(View.INVISIBLE);
            TastyToast.makeText(getActivity(),t.getMessage(),TastyToast.LENGTH_SHORT,TastyToast.ERROR).show();
        }
    });
  }
}
public class AllCakesAdapter extends RecyclerView.Adapter<AllCakesAdapter.ViewHolder> {

Context context;
List<AllCakes> allCakeList;

public AllCakesAdapter(Context context, List<AllCakes> allCakeList) {
    this.context = context;
    this.allCakeList = allCakeList;
}

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

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

    AllCakes model = allCakeList.get(position);
    Glide.with(context).load(model.getImgurl()).into(holder.allCakeImg);
    holder.allCakeName.setText(model.getName());

    holder.cakeDisPrice.setPaintFlags(holder.cakeDisPrice.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

    holder.moreCake.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            NavController navController = Navigation.findNavController((Activity) context,R.id.fragment);
            navController.navigate(R.id.cakeDetailFragment);
        }
    });
}

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

public class ViewHolder extends RecyclerView.ViewHolder {

    ImageView allCakeImg;
    Button moreCake;
    TextView allCakeName;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        
        allCakeImg = itemView.findViewById(R.id.allCakeImg);
        moreCake = itemView.findViewById(R.id.moreCake);
        allCakeName = itemView.findViewById(R.id.allCakeName);
      }
   }
}
public class CakeDetailFragment extends Fragment {

FragmentCakeDetailBinding fragmentCakeDetailBinding;

public CakeDetailFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    fragmentCakeDetailBinding = FragmentCakeDetailBinding.inflate(inflater,container,false);



    return fragmentCakeDetailBinding.getRoot();
  }
} 
allCakeList.clear();
allCakeList.addAll(response.body());

//rest of the logic remains same
你的电话是:
allCakeList.addAll(response.body())

每次都没有把你的清单清理掉

您必须清除该列表:

allCakeList.clear();
allCakeList.addAll(response.body());


<>这是你可以通过在你的<代码> AlcAcKelist< <代码>上设置断点来很容易地确定你自己,看看里面有什么,如果你以前从未做过,你应该考虑尝试一下。