gpt4 book ai didi

java - popBackStackImmediate() 返回空白屏幕

转载 作者:行者123 更新时间:2023-12-02 11:13:54 25 4
gpt4 key购买 nike

我正在创建一个锻炼列表,该列表使用 RecycleViewer 显示并使用 RecycleViewer Adapter 和 ViewHolder 填充。 RecycleViewer 包含在一个 fragment 中。

目标是显示一个新 fragment ,其中显示所选(单击的)锻炼的练习列表。

我设法用新 fragment 替换该 fragment 以显示练习列表,但是当我按后退按钮时,会显示空白屏幕。我不确定是什么导致了这种行为。理想情况下,当按下后退按钮时,WorkoutsListFragment 将再次显示。

您能帮我理解并解决这个问题吗?

在我的 WorkoutsActivity 中,我有这个:

public class WorkoutsActivity extends AppCompatActivity implements WorkoutsListFragment.onWorkoutSelectedInterface {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_workouts);

WorkoutsListFragment workoutsListFragment = new WorkoutsListFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager
.beginTransaction()
.add(R.id.workouts_fragment_container, workoutsListFragment)
.commit();
}

@Override
public void onBackPressed() {
super.onBackPressed();
getSupportFragmentManager().popBackStackImmediate();
}

@Override
public void onWorkoutSelected(int workoutId) {
Log.i("****","workout : " + workoutId);
ViewWorkoutFragment viewWorkoutFragment = new ViewWorkoutFragment();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.workouts_fragment_container, viewWorkoutFragment)
.addToBackStack(null)
.commit();
}
}

为了保持简短,我在 WorkoutsListFragment 中创建了 onWorkoutSelectedInterface 并在 onAttach 函数中分配了它的值,我在其中获取父 Activity 。

然后我在 onCreateView 函数中设置了 RecycleViewer。我将 onWorkoutSelectedInterface 传递给适配器,然后将相同的接口(interface)传递给 ViewHolder。

我的 View 持有者看起来像这样:

 WorkoutListViewHolder(View card, WorkoutsListFragment.onWorkoutSelectedInterface onWorkoutSelectedInterface) {
super(card);
this.title = card.findViewById(R.id.workout_card_title);
this.subTitle = card.findViewById(R.id.workout_card_sub_title);
this.icon = card.findViewById(R.id.icon);
this.workoutId = 0;

card.setOnClickListener((View v) -> {
Log.i("view", ""+ this.workoutId);
onWorkoutSelectedInterface.onWorkoutSelected(9);
});
}

完整代码可以在 GitHub 上找到: https://github.com/michalorestes/getFitApp/tree/master/app/src/main/java/com/jds/fitnessjunkiess/getfitapp/Activities/WorkoutsActivity

提前感谢您关注此内容:)

更新:

我想我越来越了解这个问题了。听起来可能很奇怪, this.dataSet.clear() 删除了属性中的所有数据(如预期)和参数中的所有数据(意外!)。因此,运行时 this.dataSet = dataSet;由于没有可显示的数据,因此未显示 View 。看起来两个变量都指向相同的内存位置:/

 public void swapData(List<Workout> dataSet){
if (this.dataSet != null) {
this.dataSet.clear();
this.dataSet.addAll(dataSet);
}
else {
this.dataSet = dataSet;
}

notifyDataSetChanged();
}

最佳答案

我通过将交换函数更改为以下内容解决了这个问题:

    public void swapData(List<Workout> data){
this.dataSet = data;
notifyDataSetChanged();
}

关于java - popBackStackImmediate() 返回空白屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50425442/

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