我正在尝试制作一个简单的提醒应用。创建新提醒时,我有以下设置:
的 MainEditActivity.java: 的
private LocationFragment mLocationFragment;
private DateFragment mDateFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_remainer_main); // 2 frame layouts
if (savedInstanceState == null) {
Fragment newFragment = new NewReminderFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.reminder_title_fragment, newFragment).commit();
mDateFragment = new DateFragment();
ft = getFragmentManager().beginTransaction();
ft.add(R.id.date_or_location_fragment, mDateFragment).commit();
}
}
public void onCheckBoxClick(View view)
{
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if(mLocationFragment == null)
mLocationFragment = new LocationFragment();
CheckBox checkBox = (CheckBox)findViewById(R.id.checkBoxID);
if(checkBox != null)
{
if(checkBox.isChecked()) {
fragmentTransaction.replace(R.id.date_or_location_fragment, mLocationFragment);
} else {
fragmentTransaction.replace(R.id.date_or_location_fragment, mDateFragment);
}
fragmentTransaction.commit();
}
@Override
public void handleEvent(EventInfo event) {
// here I get all the data (name, data, time, location, etc)
}
的 EditNameFragment.java: 的
private EventHandler mEventHandler;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mEventHandler = (EventHandler)activity;
}
View doneButton = actionBarButtons.findViewById(R.id.doneBtnTextID);
doneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createNewReminder();
}
});
private void createNewReminder()
{
// Event info object to store all information (reminder name, data, time, etc)
EventInfo eventInfo = new EventInfo();
// access either Date or Location Fragment (depending on which is visible)
// FIXME: access the fragments and get the data
// let the activity know to display the new reminder
mEventHandler.handleEvent(eventInfo);
}
问题:我开始只使用1个MainActivity和所有元素以及ViewFlipper。然后我读到片段最好最终适应平板电脑更好。这是解决这个问题的正确方法吗?
问题:我知道如何从 EditNameFragment.java 获取数据。但是如何从 EditDataFragment 或 EditLocationFragment 中获取用户输入的数据? 我是否需要MainActivity中的这两个片段的实例来访问他们的视图?或者我是否需要像使用EventHandler那样的其他回调?如果是,那么规则是对每个片段进行回调吗?
我想我正在努力解决这些组件之间的通信流程。我知道片段到片段的通信不是一个好的设计
答案 0 :(得分:0)
碎片是独立的模块化组件,如果它们彼此独立地呈现则是有意义的。规范的例子是报纸文章列表和文章的显示......两者都可以单独或单独呈现,这是有意义的。在你的情况下,我认为有多个片段可能是不必要的,因为它们没有独立于另一个有意义(或者你最终会得到一个半定义的事件)。好像你有一个片段来编辑日期和一个片段来编辑名称,但从概念上讲,这两个片段确实编辑了一个“对象”,即事件。因此,这可能应该使用ViewFlipper在一个片段内完成。
你见过这个吗?
http://developer.android.com/training/basics/fragments/communicating.html
您需要主活动中所有三个片段的实例,并且您需要为每个片段定义接口并在主活动中实现它们。