共享首选项中的更改后替换相同的片段

时间:2015-02-10 21:40:58

标签: android android-activity android-fragments

我有五个片段。每个片段加载两种类型的Listviews(学生列表和员工列表)。用户必须从设置中选择它(共享首选项)哪种类型的列表,他们在所有五个片段中看到的是所有五个片段中的学生列表还是员工列表。这很好。

现在我在导航抽屉里放了一个文本(菜单项)。单击该文本时,(共享首选项应更改)现有列表应从“学生”切换到“员工”列表或“员工到学生”列表。

我试过某种方式,但在切换列表之后,我的片段没有重新加载

public void onNavigationDrawerItemSelected(int position, NavItem item){
        Fragment fragment;
        String switchs = item.getData();
        if(switchs.equals("switch")){

            SharedPreferences sharedPref= getApplicationContext().getSharedPreferences("switchview", 0);
            String my_view = sharedPref.getString("view", "");
            Log.v("INFO",switchs + my_view);

            switch (my_view){
                case "true" :
                        my_view = "false";
                break;

                case "false" :
                    my_view = "true";
                    break;
            }
            Log.v("INFO","myView" + my_view);
            SharedPreferences.Editor editor= sharedPref.edit();
            editor.putString("view", my_view);
            editor.commit();

            // Reload current fragment
            Fragment frg = null;
            frg = getSupportFragmentManager().findFragmentByTag("main");

            Log.v("INFO","fragment" + frg);
            final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.container, frg,"main").commit();

        }else{
        try {
            fragment = item.getFragment().newInstance();
            if (fragment != null) {
                //adding the data
                Bundle bundle = new Bundle();
                String extra = item.getData();
                bundle.putString(DATA, extra);
                fragment.setArguments(bundle);

                FragmentManager fragmentManager = getSupportFragmentManager();

                fragmentManager.beginTransaction()
                    .replace(R.id.container, fragment,"main").commit();

                setTitle(item.getText());

                if (null != MainActivity.this.getSupportActionBar() && null != MainActivity.this.getSupportActionBar().getCustomView()){
                    MainActivity.this.getSupportActionBar().setDisplayOptions(
                            ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);
                } 

             } else {
                // error in creating fragment
                Log.e("MainActivity", "Error in creating fragment");
             }
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        }
    }

帮帮我,谢谢。

1 个答案:

答案 0 :(得分:0)

尝试为getFragmentManager()更改getSupportFragmentManager(),除非您正在处理另一个片段内的片段

除此之外,我不确定为什么要重新加载片段只是为了更改ListViews的内容