单击不同片段上的视图时如何触发 "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- 您必须创建一个接口来实现从 SongsListRecyclerview
到 MainActivity
的通信,如 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- 在您实施 OnSongSelectedListener
的 MainActivity
中
你会做改变
class MainActivity extends Activity{
...
@Override
public void onSongSelected(String title, String content){
bottomSheet.titleView.setText(title);
bottomSheet.contentView.setText(content);
}
}
我正在开发 NavigationDrawer Activity.I 也有一个通过导航打开的选项卡式片段。我在其中一个 tabs.I 中有一个 RecyclerView,已将 RecyclerView 的视图设置为监听点击。
在 NavigationDrawer 的 MainActivity 中,我填充了 BottomSheet,以便它在整个导航过程中可见。我在 Bottomsheet 中有一个 textView。
现在我想更改 textView(在 Bottomsheet 中)的内容 title/description 从 RecyclerView(或 ViewHolder)单击的视图。
@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- 您必须创建一个接口来实现从 SongsListRecyclerview
到 MainActivity
的通信,如 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- 在您实施 OnSongSelectedListener
的 MainActivity
中
你会做改变
class MainActivity extends Activity{
...
@Override
public void onSongSelected(String title, String content){
bottomSheet.titleView.setText(title);
bottomSheet.contentView.setText(content);
}
}