从对话片段到片段获取日期
Getting date from dialog fragment to fragment
似乎有很多与此主题相关的问题。当我阅读其中的大部分内容时,我遇到了一个问题。通常人们会尝试制作一个片段,然后从那里生成一个对话片段。所以对话框片段在片段内部。
在我的例子中,我创建了一个按钮,用于在工具栏上打开一个对话框片段。然后我从导航栏打开我的主要片段。所以 dialogfragment 和我的主要片段是通过同一个主要 activity 调用的,只是在不同的地方。我无法从片段内部调用对话框片段,因为它是在选择菜单选项时被调用的。
我尝试创建一个接口和一个监听器
newFragment.setTargetFragment(某处, 1);我不知道我应该在 somethinghere 领域放什么。 getactivity,mealsworkoutfragment 和 .this 是错误的)
我也尝试让我的片段扩展 Dialogfragment,但每次我按下按钮时都会生成我的片段,这似乎是一种糟糕的方法。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.date_picker) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.mealworkoutTab) {
iconShow = true;
invalidateOptionsMenu();
FragmentTransaction mealsworkoutsFrag = getSupportFragmentManager().beginTransaction();
mealsworkoutsFrag.replace(R.id.flMain,new MealsWorkoutsFragment());
mealsworkoutsFrag.commit();
} else if (id == R.id.userinfoTab) {
iconShow = false;
invalidateOptionsMenu();
FragmentTransaction userInfoFrag = getSupportFragmentManager().beginTransaction();
userInfoFrag.replace(R.id.flMain,new UserInfoFragment());
userInfoFrag.commit();
} else if (id == R.id.logoutTab) {
auth.signOut();
}
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
我猜想一定存在一个简单的解决方案,因为这看起来有点微不足道(从对话片段到片段)
建议在这种情况下使用像 EventBus 这样的库来传达和收听 "events" 并传递数据。因此,在您的情况下,当用户选择日期时,将发布带有所选日期有效负载的 'event' 。然后这个事件被捕获在你的 Fragment 中(因为你让你的 Fragment 订阅了这个特定的事件)然后你可以随意处理有效负载(选定的日期)。
如果上面的内容听起来太难理解或难以理解,请访问上面的link。它有示例代码。这个库实现起来非常简单,在这种情况下非常有用。
似乎有很多与此主题相关的问题。当我阅读其中的大部分内容时,我遇到了一个问题。通常人们会尝试制作一个片段,然后从那里生成一个对话片段。所以对话框片段在片段内部。
在我的例子中,我创建了一个按钮,用于在工具栏上打开一个对话框片段。然后我从导航栏打开我的主要片段。所以 dialogfragment 和我的主要片段是通过同一个主要 activity 调用的,只是在不同的地方。我无法从片段内部调用对话框片段,因为它是在选择菜单选项时被调用的。
我尝试创建一个接口和一个监听器 newFragment.setTargetFragment(某处, 1);我不知道我应该在 somethinghere 领域放什么。 getactivity,mealsworkoutfragment 和 .this 是错误的)
我也尝试让我的片段扩展 Dialogfragment,但每次我按下按钮时都会生成我的片段,这似乎是一种糟糕的方法。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.date_picker) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.mealworkoutTab) {
iconShow = true;
invalidateOptionsMenu();
FragmentTransaction mealsworkoutsFrag = getSupportFragmentManager().beginTransaction();
mealsworkoutsFrag.replace(R.id.flMain,new MealsWorkoutsFragment());
mealsworkoutsFrag.commit();
} else if (id == R.id.userinfoTab) {
iconShow = false;
invalidateOptionsMenu();
FragmentTransaction userInfoFrag = getSupportFragmentManager().beginTransaction();
userInfoFrag.replace(R.id.flMain,new UserInfoFragment());
userInfoFrag.commit();
} else if (id == R.id.logoutTab) {
auth.signOut();
}
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
我猜想一定存在一个简单的解决方案,因为这看起来有点微不足道(从对话片段到片段)
建议在这种情况下使用像 EventBus 这样的库来传达和收听 "events" 并传递数据。因此,在您的情况下,当用户选择日期时,将发布带有所选日期有效负载的 'event' 。然后这个事件被捕获在你的 Fragment 中(因为你让你的 Fragment 订阅了这个特定的事件)然后你可以随意处理有效负载(选定的日期)。
如果上面的内容听起来太难理解或难以理解,请访问上面的link。它有示例代码。这个库实现起来非常简单,在这种情况下非常有用。