【问题标题】:Getting date from dialog fragment to fragment从对话片段到片段获取日期
【发布时间】:2019-06-30 14:13:17
【问题描述】:

似乎有很多与此主题相关的问题。当我阅读其中的大部分内容时,我遇到了一个问题。通常人们会尝试制作一个片段,然后从那里产生一个对话片段。所以对话框片段在片段内部。

在我的例子中,我创建了一个在工具栏上打开一个对话框片段的按钮。然后我从导航栏打开我的主要片段。所以对话片段和我的主要片段通过相同的主要活动被调用,只是在不同的地方。我无法从片段内部调用对话框片段,因为它在选择菜单选项时被调用。

当我尝试创建一个带有监听器的接口时 newFragment.setTargetFragment(somethinghere, 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;
    }

我猜测必须存在一个简单的解决方案,因为这看起来有点微不足道(从对话片段中获取某个片段)

【问题讨论】:

  • 选择日期时只需发送本地广播并在活动中收听
  • 既然我已经有 frag extends Fragment 我也可以扩展 BroadcastReceiver 吗?

标签: android android-fragments android-dialogfragment


【解决方案1】:

建议在这种情况下使用EventBus 之类的库来传达和收听“事件”并传递数据。因此,在您的情况下,当用户选择日期时,会发布一个带有所选日期有效负载的“事件”。然后在您的 Fragment 中捕获此事件(因为您让 Fragment 订阅此特定事件),然后您可以根据需要处理有效负载(选定日期)。

如果上面的内容听起来太难理解或难以理解,请访问上面的链接。它有示例代码。这个库实现起来非常简单,在这种情况下非常有用。

【讨论】:

  • 这似乎比我想象的要复杂。那是第 3 方库,对吗?我猜谷歌还没有做出这样的事情。虽然我检查了一些视频,但似乎这可以完成这项工作。
猜你喜欢
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 2018-11-30
相关资源
最近更新 更多