单击不同片段上的视图时如何触发 "BottomSheet" 展开?

How to trigger a "BottomSheet" to expand when clicked on a view which is on a different fragment?

我正在开发 NavigationDrawer Activity.I 也有一个通过导航打开的选项卡式片段。我在其中一个 tabs.I 中有一个 RecyclerView,已将 RecyclerView 的视图设置为监听点击。

在 NavigationDrawer 的 MainActivity 中,我填充了 BottomSheet,以便它在整个导航过程中可见。我在 Bottomsheet 中有一个 textView。

现在我想更改 textView(在 Bottomsheet 中)的内容 title/description 从 RecyclerView(或 ViewHolder)单击的视图。

在 MainActivity 填充我的 BottomSheet。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    extras=getIntent().getExtras();
    nameholder=findViewById(R.id.nameolder);
ConstraintLayout llBottomSheet = findViewById(R.id.bottom_sheet);
    bottomSheetBehavior = BottomSheetBehavior.from(llBottomSheet);
    bottomSheetBehavior.setPeekHeight(250);
    bottomSheetBehavior.setHideable(false);
    bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback(){
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState{}
        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {

        }
    });

我让 viewHolder 能够监听点击。

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    public TextView name;
    public TextView description;
    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
        name=itemView.findViewById(R.id.title);
        description=itemView.findViewById(R.id.description);
    }

    @Override
    public void onClick(View v) {
        int position=getAdapterPosition();
        ListItem item=mListItems.get(position);
        Toast.makeText(mContext,"this is",Toast.LENGTH_LONG).show();
        Intent intent=new Intent(mContext, MainActivity.class);
        intent.putExtra("name",item.getName());
        intent.putExtra("description",item.getDescription());
        mActivity.nameholder.setText(item.getName());
        mContext.startActivity(intent);
    }
}

这是我的标签片段。

public class FragmentTabLayoutLibrary extends Fragment {
public FragmentTabLayoutLibrary() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_library, container, false);
    ViewPager vp_pages=view.findViewById(R.id.vp_pages);
    PagerAdapter pagerAdapter=new FragmentAdapter(getFragmentManager());
    vp_pages.setAdapter(pagerAdapter);
    TabLayout tbl_pages= view.findViewById(R.id.tbl_pages);
    tbl_pages.setupWithViewPager(vp_pages);
    return view;
}
class FragmentAdapter extends FragmentPagerAdapter {
    public FragmentAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                return new SongsListRecyclerview();
            case 1:
                return new HomeFragment();
        }
        return null;
    }
    @Override
    public int getCount() {
        return 2;
    }
    @Override
    public CharSequence getPageTitle(int position) {
        switch (position){
            case 0:return "Recycler";
            case 1:return "Home";
            default:return null;
        }
    }
}

}

我的 RecyclerView 在 Recycler 选项卡中。

请帮忙 anyone.I 不需要 code.I 只是想要一种从 RecyclerView.Since RecyclerView 不在同一个主视图中触发 Bottomsheet 的方法 activity 我不知道该怎么做

据我了解,您有一个显示 RecyclerView 的片段 items.And 该片段托管在控制 BottomSheet 的 MainActivity 中。

1- 您必须创建一个接口来实现从 SongsListRecyclerviewMainActivity 的通信,如 here

假设您创建的界面如下所示:

 interface OnSongSelectedListener{
    void onSongSelected(String title, String content);
 }

2- 在您的 SongsListRecyclerview 片段中引用第 1 步中的侦听器后,将此侦听器传递给适配器并在项目中单击调用侦听器。 所以你的 onClick 看起来像:

   @Override
    public void onClick(View v) {
        int position=getAdapterPosition();
        ListItem item=mListItems.get(position);
        Toast.makeText(mContext,"this is",Toast.LENGTH_LONG).show();
        onSongSelectedListener.onSongSelected(item.getName(),item.getDescription());
    } 

3- 在您实施 OnSongSelectedListenerMainActivity 中 你会做改变

class MainActivity extends Activity{
...
  @Override
   public void onSongSelected(String title, String content){ 
     bottomSheet.titleView.setText(title);
     bottomSheet.contentView.setText(content);
   }
}