从对话框片段获取日期

时间:2019-06-30 14:13:17

标签: android android-fragments android-dialogfragment

似乎有很多与此主题相关的问题。当我阅读大多数文章时,我遇到了一个问题。通常,人们尝试制作一个片段,然后从那里生成一个对话框片段。因此对话框片段位于片段内部。

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

我试图在创建一个接口和一个侦听器时 newFragment.setTargetFragment(somethinghere,1);我不知道我应该在这里的内容上放什么。 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;
    }

我猜想必须存在一个简单的解决方案,因为这看起来有些琐碎(将某些东西从一个对话片段变成一个片段)

1 个答案:

答案 0 :(得分:0)

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

如果以上听起来很难听懂或难以理解,请访问上面的链接。它具有示例代码。该库非常易于实现,在这种情况下很有帮助。