Как вызвать «BottomSheet» для раскрытия при нажатии на представление, которое находится на другом фрагменте? - PullRequest
0 голосов
/ 25 января 2019

Я работаю над NavigationDrawer Activity. У меня также есть фрагмент с вкладками, который открывается навигацией. У меня есть RecyclerView на одной из вкладок. Я настроил представления RecyclerView для прослушивания щелчков.

В MainActivity NavigationDrawer я заполняю BottomSheet так, чтобы он был виден во время навигации. И у меня есть textView в Bottomsheet.

Теперь я хочу изменить содержимое textView (в нижней таблице) заголовок / описание представления, щелкнувшего из RecyclerView (или ViewHolder). Bottomsheet having the textview

RecyclerView Заполнение моего BottomSheet в MainActivity.

@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;
        }
    }
}
* *} Тысяча двадцать-один

My RecyclerView находится на вкладке Recycler.

Пожалуйста, помогите кому-нибудь. Мне не нужен код. Я просто хочу, чтобы способ запуска Bottomsheet из RecyclerView. Так как RecyclerView не в той же основной деятельности, я не знаю, как это сделать

1 Ответ

0 голосов
/ 26 января 2019

Как я понял, у вас есть фрагмент, отображающий элементы RecyclerView. И этот фрагмент размещен в MainActivity, управляющем BottomSheet.

1- Вы должны создать интерфейс для достижения связи от SongsListRecyclerview до MainActivity, как в здесь

допустим, что созданный вами интерфейс выглядит так:

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

2 - Получив ссылку на слушателя из шага 1 в вашем фрагменте SongsListRecyclerview, передайте этот слушатель на адаптер и в пункте щелкните вызов слушателя. Таким образом, ваш 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- в вашем MainActivity, где вы реализуете OnSongSelectedListener вы внесете изменения

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

...