微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

适配器和片段我发生了一些难以理解的事情

如何解决适配器和片段我发生了一些难以理解的事情

问题是,当我将类别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 举报,一经查实,本站将立刻删除。