Gle*_*nov 20 android dialog modal-dialog android-fragments bottom-sheet
我正在开发一个Material Design应用程序.我想实现的一个功能是某种民意调查.当用户单击列表的元素时,应显示如下所示的持久性底部工作表对话框.然后,当用户单击任何按钮时,此对话框应该消失,并且应显示模式底部工作表对话框,为用户提供有关在开头单击的列表项的更多信息.看起来像这样.
我找不到有关BottomSheetDialog和BottomSheetDialogFragment的任何明确解释,以及如何正确使用它们,即使在阅读有关AppCompat对话框的一些信息之后也是如此.所以,我的问题是:
Gle*_*nov 12
最后,我找到了解决方案并且有效.告诉我,如果我做错了什么.它基本上像本指南中的 DialogFragment ,但我做的有点不同.
1)它们的区别与DialogFragment和Dialog相同,它们都是模态的.如果你需要持久对话,请使用BottomSheetBehaviour(我发现两个对话框都必须在我的应用程序中是模态的).
2)我必须首先用一些代码回答第三个问题,然后很容易回答第二个问题.
3)创建一个新的public class
,这extends BottomSheetDialogFragment
,我把它叫做FragmentRandomEventPoll.这里有两件事需要实施.
覆盖方法onCreateView
.它几乎与onCreate
活动中的方法相同,只是它返回它应该膨胀的视图:
// We will need it later
private static String headerItem;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_random_event_poll, container, false);
header = (TextView) v.findViewById(R.id.uRnd_fragment_bottom_sheet_poll_header);
skip = (Button) v.findViewById(R.id.uRnd_fragment_bottom_sheet_button_skip);
header.setText(...);
// I implemented View.OnClickListener interface in my class
skip.setOnClickListener(this);
return v;
}
Run Code Online (Sandbox Code Playgroud)静态方法,你可以传递必要的数据,并获得这个类的新实例(可能我可能只是使用常规构造函数,我将不得不再尝试一下).URandomEventListItem
是数据模型类.
public static FragmentRandomEventPoll newInstance(URandomEventListItem item) {
FragmentRandomEventPoll fragment = new FragmentRandomEventPoll();
headerItem = item.getHeader();
return fragment;
}
Run Code Online (Sandbox Code Playgroud)2)要在活动或任何其他地方获取输入事件,请使用必要的方法定义接口并为其实例创建setter方法:
private PollButtonClickListener listener;
public void setListener(PollButtonClickListener listener) {
this.listener = listener;
}
public interface PollButtonClickListener {
void onAnyButtonClick(Object data)
}
Run Code Online (Sandbox Code Playgroud)
在您想要获取数据的位置(在布局中指定了"dialog_event_poll"标记):
FragmentRandomEventPoll poll = FragmentRandomEventPoll.newInstance(events.get(id));
poll.setListener(new FragmentRandomEventPoll.PollButtonClickListener() {
@Override
public void onAnyButtonClick(Object data) {
// Do what you want with your data
}
});
poll.show(getSupportFragmentManager(), "dialog_event_poll");
}
Run Code Online (Sandbox Code Playgroud)
如果有任何不清楚的地方,我的项目文件可以在Github上找到.
归档时间: |
|
查看次数: |
9243 次 |
最近记录: |