如何解决适配器和片段我发生了一些难以理解的事情
问题是,当我将类别ID从适配器发送到MainFragment中的getdishes时,即使类别ID值在getdishes中发生了变化,我也无法从屏幕上的dishes中看到任何内容 我希望代码可以澄清问题 谢谢
MainFragment内部
public class MainFragment extends Fragment
{
public void getCategory()
{
categoryviewmodel.getAll().observe(this,new Observer<List<Category>>() {
@Override
public void onChanged(List<Category> categories) {
MainFragment.this.categories= categories;
categoryAdapter.SetData(categories);
if(categories.size() != 0)
{
selectedCategoryID = categories.get(0).getId();
getdishes(selectedCategoryID);
}
else
{
dishes = new ArrayList<>();
mainFragmentdishesAdapter.sSetData(dishes);
}
}
});
}
我设置了一个Toast来查看CategoryId值是否正在更改,并且是否正在更改
public void getdishes(final int CategoryIdd)
{
selectedCategoryID = CategoryIdd;
dishesviewmodel.getAll(CategoryIdd).observe(this,new Observer<List<dishes>>() {
@Override
public void onChanged(List<dishes> dishes)
{
if(dishes.size() == 0)
MainFragment.this.dishes = dishes;
mainFragmentdishesAdapter.sSetData(dishes);
Toast.makeText(getActivity(),""+CategoryIdd,Toast.LENGTH_SHORT).show();
}
});
}
在适配器内部
public class MainFragmentCategoryAdapter extends RecyclerView.Adapter<MainFragmentCategoryVH>
{
public CalldishesBack mCalldishesBack;
public interface CalldishesBack { void getdishes(int CategoryIdd);}
mCalldishesBack = (CalldishesBack) context;
holder.getView().setonClickListener(
new View.OnClickListener()
{
@Override
public void onClick(View view)
{
mCalldishesBack.getdishes(category.getId());
}
});
public void SetData(List<Category> categories)
{
this.categories = categories;
notifyDataSetChanged();
}
该接口的MainActivity内部
public class MainActivity extends AppCompatActivity implements MainFragmentCategoryAdapter.CalldishesBack
{
MainFragment mainFragment;
if(savedInstanceState == null){
mainFragment = MainFragment.newInstance(new Bundle()); // use real bundle here
getSupportFragmentManager()
.beginTransaction()
.add(R.id.content,mainFragment,"FragMain").commit();
}
public void getdishes(int CategoryIdd) {
if(mainFragment != null)
{
mainFragment.getdishes(CategoryIdd);
}
}
仅出现第一个类别的菜肴
解决方法
使用界面是我的错误 我与BottomSheet或其他任何东西一起使用的那个。我不知道还有使用界面的另一种方法 旧方法效果不佳
在适配器中执行第一步
public CallDishesYes mCallDishesYes;
public MainFragmentCategoryAdapter(Context context,List<Category> categories,CallDishesYes mCallDishesYes) {
this.context = context;
this.categories = categories;
this.mCallDishesYes = mCallDishesYes;
}
holder.getView().setOnClickListener(
new View.OnClickListener()
{
@Override
public void onClick(View view)
{
///region Old solution that didn't work
//mCallDishesBack.getDishes(category.getId());
///endregion
mCallDishesYes.getDishes(category.getId());
}
});
public interface CallDishesYes {
void getDishes(int IdCategory);
}
在片段中拖曳
public class MainFragment extends Fragment implements MainFragmentCategoryAdapter.CallDishesYes
{
dishes = new ArrayList<>();
mainFragmentDishesAdapter = new MainFragmentDishesAdapter(getActivity(),dishes);
public void getDishes(int CategoryIdd)
{
dishesViewModel.getAll(CategoryIdd).observe(this,new Observer<List<Dishes>>() {
@Override
public void onChanged(List<Dishes> dishes)
{
if (dishes.size() == 0)
MainFragment.this.dishes = dishes;
mainFragmentDishesAdapter.sSetDate(dishes);
}
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。