Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据特定条件替换ViewPager片段_Java_Android_Android Fragments_Android Viewpager_Tabview - Fatal编程技术网

Java 根据特定条件替换ViewPager片段

Java 根据特定条件替换ViewPager片段,java,android,android-fragments,android-viewpager,tabview,Java,Android,Android Fragments,Android Viewpager,Tabview,我创建了一个简单的ViewPager表格布局,在3个选项卡中显示3个片段。现在,如果用户打开另一个活动并进行一些更改,然后返回到包含ViewPager的活动,则第三个片段应替换为新片段。我不希望用户再看到旧的第三个片段 当用户从另一个活动返回ViewPager活动时,将调用onResume()方法,由此我们可以知道是否替换第三个片段 这是ViewPager的适配器: public class TabsPagerAdapterMain extends FragmentPagerAdapter {

我创建了一个简单的ViewPager表格布局,在3个选项卡中显示3个片段。现在,如果用户打开另一个活动并进行一些更改,然后返回到包含ViewPager的活动,则第三个片段应替换为新片段。我不希望用户再看到旧的第三个片段

当用户从另一个活动返回ViewPager活动时,将调用
onResume()
方法,由此我们可以知道是否替换第三个片段

这是ViewPager的适配器

public class TabsPagerAdapterMain extends FragmentPagerAdapter {

    int mNumOfTabs;

    public TabsPagerAdapterMain(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                YourStoryFragment yourStoryTab = new YourStoryFragment();
                return yourStoryTab;
            case 1:
                BrowseStoriesFragment browseStoriesTab = new BrowseStoriesFragment();
                return browseStoriesTab;
            case 2:
                ParseObject collegeObject;
                ParseUser user = ParseUser.getCurrentUser();
                collegeObject = user.getParseObject("college");
                if (collegeObject == null) {
                    CollegeSelectFragment collegeSelectFragment = new CollegeSelectFragment();
                    return collegeSelectFragment;
                } else {
                    YourCollegeFragment yourCollegeTab = new YourCollegeFragment();
                    return yourCollegeTab;
                }

            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}
public class XXXXXXMainTabbed extends AppCompatActivity {
    ViewPager viewPager;
    public Student xxxxxMainStudent;
    private boolean brandNewAccount = false;
    private CharSequence mTitle;
    private long firstTime = 0;

    public int yourStoryFragmentMenuId = 0;
    Fragment globalFragmentThatIsOpen;
    static TextView actionTitle;
    Spinner browse_spinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xxxxxx_main_tabbed);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        getSupportActionBar().setIcon(R.drawable.actionbar_space_between_icon_and_title);
        actionTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
        actionTitle.setTypeface(TypeFaceController.titleFace(getApplicationContext()));

       browse_spinner = (Spinner) toolbar.findViewById(R.id.browse_spinner);
        browse_spinner.setVisibility(View.GONE);


        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText(" Story").setIcon(R.drawable.browse_tab));
        tabLayout.addTab(tabLayout.newTab().setText(" Browse").setIcon(R.drawable.browse_tab));
        tabLayout.addTab(tabLayout.newTab().setText(" College").setIcon(R.drawable.colleges_tab));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        setTitle("Your Story");



        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent inte = new Intent(getApplicationContext(), WriteStory.class);
                startActivity(inte);
            }
        });

        viewPager = (ViewPager) findViewById(R.id.pager);
        final TabsPagerAdapterMain adapter = new TabsPagerAdapterMain
                (getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setOffscreenPageLimit (4);
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());

                switch (tab.getPosition()) {
                    case 0:
                        setTitle("Your Story");
                        browse_spinner.setVisibility(View.GONE);
                        break;
                    case 1:
                        setTitle("Browse");
                        browse_spinner.setVisibility(View.VISIBLE);
                        break;
                    case 2:
                        setTitle("Your College");
                        browse_spinner.setVisibility(View.GONE);
                        break;
                    default:
                        setTitle("XXXXXX");
                        browse_spinner.setVisibility(View.GONE);
                        break;
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

        // Grab the bundle information
        Intent intentFromPrevious = getIntent();
        Bundle extras = intentFromPrevious.getExtras();

        saveInPreferenceBoolean("LoggedIn",true);

        if (extras != null) {
            brandNewAccount = extras.getBoolean("brandNewAccount");

            xxxxxxMainStudent = (Student) intentFromPrevious.getParcelableExtra("studentObject");

        } else {

        }

        if (brandNewAccount == true) {
            Intent inte = new Intent(getApplicationContext(), WriteStory.class);
            brandNewAccount = false;
            startActivity(inte);
        }

        saveInPreference("firstName", "");
        saveInPreference("lastName", "");
        saveInPreference("countryFrom", "");
        saveInPreference("collegeExists", "");
        saveInPreference("username", "");
        saveInPreference("email", "");
        saveInPreference("password", "");
        saveInPreference("dateOfBirth", "");
        saveInPreference("collegeId", "");
        saveInPreference("courseId", "");
        saveInPreference("facebookAccount", "");

        //updating app version in the user table
        updateUserAppVersion();
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e("xxxxxxMainTabbed", "The onResume() event");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //getMenuInflater().inflate(R.menu.home_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {

        Log.e("postCounter", "" + xxxxxxMainStudent.getPostCount());
        if (isItYourStory() == true) {

            YourStoryFragment obj = new YourStoryFragment();
            if (obj.canEditItem == false) {
                obj.menuTitle = "EDIT";
            } else  {
                if (xxxxxxMainStudent.getPostCount() == 0) {
                    obj.menuTitle = "EDIT";
                }
                else {
                    obj.menuTitle = "DONE";
                }
            }

        }


        return super.onPrepareOptionsMenu(menu);
    }

    public Student getStudentDataFromMain() {
        return this.xxxxxxMainStudent;
    }

    public void displayView(int pos) {

    }

    private void updateUserAppVersion(){
        String appVersionName = getAppVersionName();

        ParseUser user = ParseUser.getCurrentUser();
        user.put("appVersion", appVersionName);

        user.saveInBackground(new SaveCallback() {
            public void done(com.parse.ParseException e) {
                if (e == null) {
                    // Save was successful!
                    Log.e("appVersion", "saved successfully");
                } else {
                    // Save failed. Inspect e for details.
                    Log.e("appVersion", "saved successfully");
                }
            }
        });
    }

    public String getAppVersionName() {
        PackageInfo pInfo = null;
        try {
            pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        String version = pInfo.versionName;

        return version;
    }

    public boolean isItYourStory() {

        if (viewPager.getCurrentItem() == 0) {
            return true;
        }
     return  false;
    }

    // method to save variable in preference
    public void saveInPreference(String name, String content) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString(name, content);
        editor.commit();
    }

    // getting content from preferences
    public String getFromPreference(String variable_name) {
        String preference_return;
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        preference_return = preferences.getString(variable_name, "");

        return preference_return;
    }

    // method to save variable in preference
    public void saveInPreferenceBoolean(String name, boolean content){
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putBoolean(name, content);
        editor.commit();
    }

    // getting content from preferences
    public boolean getFromPreferenceBoolean(String variable_name){
        boolean preference_return;
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        preference_return = preferences.getBoolean(variable_name, false);

        return preference_return;
    }

    public void setTitle(String title) {
        actionTitle.setText(title);
    }
}
public class RootCollegeFragment extends Fragment {

    private static final String TAG = "RootFragment";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        /* Inflate the layout for this fragment */
        View view = inflater.inflate(R.layout.root_fragment_college, container, false);

        ParseObject collegeObject;
        ParseUser user = ParseUser.getCurrentUser();
        collegeObject = user.getParseObject("college");
        if (collegeObject == null) {
            CollegeSelectFragment collegeSelectFragment= new CollegeSelectFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, collegeSelectFragment,null)
                    .addToBackStack(null)
                    .commit();
        } else {
            YourCollegeFragment yourCollegeFragment= new YourCollegeFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, yourCollegeFragment,null)
                    .addToBackStack(null)
                    .commit();
        }



        return view;
    }

    @Override
    public void onResume() {
        Log.e("RootCollegeFragment", "onResume of RootCollegeFragment");
        ParseObject collegeObject;
        ParseUser user = ParseUser.getCurrentUser();
        collegeObject = user.getParseObject("college");
        if (collegeObject == null) {
            CollegeSelectFragment collegeSelectFragment= new CollegeSelectFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, collegeSelectFragment,null)
                    .addToBackStack(null)
                    .commit();
        } else {
            YourCollegeFragment yourCollegeFragment= new YourCollegeFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, yourCollegeFragment,null)
                    .addToBackStack(null)
                    .commit();
        }
        super.onResume();
    }


}
public class TabsPagerAdapterMain extends FragmentPagerAdapter {

    int mNumOfTabs;

    public TabsPagerAdapterMain(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                YourStoryFragment yourStoryTab = new YourStoryFragment();
                return yourStoryTab;
            case 1:
                BrowseStoriesFragment browseStoriesTab = new BrowseStoriesFragment();
                return browseStoriesTab;
            case 2:
                RootCollegeFragment rootCollegeFragment = new RootCollegeFragment();
                return rootCollegeFragment;

            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}
包含ViewPager的活动

public class TabsPagerAdapterMain extends FragmentPagerAdapter {

    int mNumOfTabs;

    public TabsPagerAdapterMain(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                YourStoryFragment yourStoryTab = new YourStoryFragment();
                return yourStoryTab;
            case 1:
                BrowseStoriesFragment browseStoriesTab = new BrowseStoriesFragment();
                return browseStoriesTab;
            case 2:
                ParseObject collegeObject;
                ParseUser user = ParseUser.getCurrentUser();
                collegeObject = user.getParseObject("college");
                if (collegeObject == null) {
                    CollegeSelectFragment collegeSelectFragment = new CollegeSelectFragment();
                    return collegeSelectFragment;
                } else {
                    YourCollegeFragment yourCollegeTab = new YourCollegeFragment();
                    return yourCollegeTab;
                }

            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}
public class XXXXXXMainTabbed extends AppCompatActivity {
    ViewPager viewPager;
    public Student xxxxxMainStudent;
    private boolean brandNewAccount = false;
    private CharSequence mTitle;
    private long firstTime = 0;

    public int yourStoryFragmentMenuId = 0;
    Fragment globalFragmentThatIsOpen;
    static TextView actionTitle;
    Spinner browse_spinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xxxxxx_main_tabbed);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        getSupportActionBar().setIcon(R.drawable.actionbar_space_between_icon_and_title);
        actionTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
        actionTitle.setTypeface(TypeFaceController.titleFace(getApplicationContext()));

       browse_spinner = (Spinner) toolbar.findViewById(R.id.browse_spinner);
        browse_spinner.setVisibility(View.GONE);


        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText(" Story").setIcon(R.drawable.browse_tab));
        tabLayout.addTab(tabLayout.newTab().setText(" Browse").setIcon(R.drawable.browse_tab));
        tabLayout.addTab(tabLayout.newTab().setText(" College").setIcon(R.drawable.colleges_tab));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        setTitle("Your Story");



        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent inte = new Intent(getApplicationContext(), WriteStory.class);
                startActivity(inte);
            }
        });

        viewPager = (ViewPager) findViewById(R.id.pager);
        final TabsPagerAdapterMain adapter = new TabsPagerAdapterMain
                (getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setOffscreenPageLimit (4);
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());

                switch (tab.getPosition()) {
                    case 0:
                        setTitle("Your Story");
                        browse_spinner.setVisibility(View.GONE);
                        break;
                    case 1:
                        setTitle("Browse");
                        browse_spinner.setVisibility(View.VISIBLE);
                        break;
                    case 2:
                        setTitle("Your College");
                        browse_spinner.setVisibility(View.GONE);
                        break;
                    default:
                        setTitle("XXXXXX");
                        browse_spinner.setVisibility(View.GONE);
                        break;
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

        // Grab the bundle information
        Intent intentFromPrevious = getIntent();
        Bundle extras = intentFromPrevious.getExtras();

        saveInPreferenceBoolean("LoggedIn",true);

        if (extras != null) {
            brandNewAccount = extras.getBoolean("brandNewAccount");

            xxxxxxMainStudent = (Student) intentFromPrevious.getParcelableExtra("studentObject");

        } else {

        }

        if (brandNewAccount == true) {
            Intent inte = new Intent(getApplicationContext(), WriteStory.class);
            brandNewAccount = false;
            startActivity(inte);
        }

        saveInPreference("firstName", "");
        saveInPreference("lastName", "");
        saveInPreference("countryFrom", "");
        saveInPreference("collegeExists", "");
        saveInPreference("username", "");
        saveInPreference("email", "");
        saveInPreference("password", "");
        saveInPreference("dateOfBirth", "");
        saveInPreference("collegeId", "");
        saveInPreference("courseId", "");
        saveInPreference("facebookAccount", "");

        //updating app version in the user table
        updateUserAppVersion();
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e("xxxxxxMainTabbed", "The onResume() event");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //getMenuInflater().inflate(R.menu.home_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {

        Log.e("postCounter", "" + xxxxxxMainStudent.getPostCount());
        if (isItYourStory() == true) {

            YourStoryFragment obj = new YourStoryFragment();
            if (obj.canEditItem == false) {
                obj.menuTitle = "EDIT";
            } else  {
                if (xxxxxxMainStudent.getPostCount() == 0) {
                    obj.menuTitle = "EDIT";
                }
                else {
                    obj.menuTitle = "DONE";
                }
            }

        }


        return super.onPrepareOptionsMenu(menu);
    }

    public Student getStudentDataFromMain() {
        return this.xxxxxxMainStudent;
    }

    public void displayView(int pos) {

    }

    private void updateUserAppVersion(){
        String appVersionName = getAppVersionName();

        ParseUser user = ParseUser.getCurrentUser();
        user.put("appVersion", appVersionName);

        user.saveInBackground(new SaveCallback() {
            public void done(com.parse.ParseException e) {
                if (e == null) {
                    // Save was successful!
                    Log.e("appVersion", "saved successfully");
                } else {
                    // Save failed. Inspect e for details.
                    Log.e("appVersion", "saved successfully");
                }
            }
        });
    }

    public String getAppVersionName() {
        PackageInfo pInfo = null;
        try {
            pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        String version = pInfo.versionName;

        return version;
    }

    public boolean isItYourStory() {

        if (viewPager.getCurrentItem() == 0) {
            return true;
        }
     return  false;
    }

    // method to save variable in preference
    public void saveInPreference(String name, String content) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString(name, content);
        editor.commit();
    }

    // getting content from preferences
    public String getFromPreference(String variable_name) {
        String preference_return;
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        preference_return = preferences.getString(variable_name, "");

        return preference_return;
    }

    // method to save variable in preference
    public void saveInPreferenceBoolean(String name, boolean content){
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putBoolean(name, content);
        editor.commit();
    }

    // getting content from preferences
    public boolean getFromPreferenceBoolean(String variable_name){
        boolean preference_return;
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        preference_return = preferences.getBoolean(variable_name, false);

        return preference_return;
    }

    public void setTitle(String title) {
        actionTitle.setText(title);
    }
}
public class RootCollegeFragment extends Fragment {

    private static final String TAG = "RootFragment";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        /* Inflate the layout for this fragment */
        View view = inflater.inflate(R.layout.root_fragment_college, container, false);

        ParseObject collegeObject;
        ParseUser user = ParseUser.getCurrentUser();
        collegeObject = user.getParseObject("college");
        if (collegeObject == null) {
            CollegeSelectFragment collegeSelectFragment= new CollegeSelectFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, collegeSelectFragment,null)
                    .addToBackStack(null)
                    .commit();
        } else {
            YourCollegeFragment yourCollegeFragment= new YourCollegeFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, yourCollegeFragment,null)
                    .addToBackStack(null)
                    .commit();
        }



        return view;
    }

    @Override
    public void onResume() {
        Log.e("RootCollegeFragment", "onResume of RootCollegeFragment");
        ParseObject collegeObject;
        ParseUser user = ParseUser.getCurrentUser();
        collegeObject = user.getParseObject("college");
        if (collegeObject == null) {
            CollegeSelectFragment collegeSelectFragment= new CollegeSelectFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, collegeSelectFragment,null)
                    .addToBackStack(null)
                    .commit();
        } else {
            YourCollegeFragment yourCollegeFragment= new YourCollegeFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, yourCollegeFragment,null)
                    .addToBackStack(null)
                    .commit();
        }
        super.onResume();
    }


}
public class TabsPagerAdapterMain extends FragmentPagerAdapter {

    int mNumOfTabs;

    public TabsPagerAdapterMain(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                YourStoryFragment yourStoryTab = new YourStoryFragment();
                return yourStoryTab;
            case 1:
                BrowseStoriesFragment browseStoriesTab = new BrowseStoriesFragment();
                return browseStoriesTab;
            case 2:
                RootCollegeFragment rootCollegeFragment = new RootCollegeFragment();
                return rootCollegeFragment;

            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}

调用活动的
onResume()
时,如何在第三个选项卡中设置YourCollegeFragment

您可以创建一个变量来表示各种情况,并根据该标志创建所需片段的实例

在适配器中创建一个标志,比如

int conditionFlag;
现在创建一个公共方法来更新此标志

public void updateFlag(int flag){
    this.flag = flag;
}
在活动中,使适配器对象处于类级别,并在其onResume()方法上根据您的条件更新标志,如

adapter.updateFlag(flag);
adapter.notifyDataSetchanged();
如果notifyDataSetChanged()不起作用,您可以遵循以下解决方案


您可能希望更改片段中的布局,而不是替换框架本身。在片段内部,根据您的条件对布局进行充气,并相应地对视图进行充气。下面是我尝试过的示例代码

public class DemoFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootview;

    if (your condition is true) {
        // layout_one will be the layout for your CollegeSelectFragment
        rootview = inflater.inflate(R.layout.layout_one, container, false);
    } else {
       // layout_one will be the layout for your YourCollegeFragment
        rootview = inflater.inflate(R.layout.layout_two, container, false);
    }
    setupViews(rootview);
    return rootview;
}


private void setupViews(View v) {
    if (your condition is true -- same as above check) {
        // find and set view that are in the layout_one.xml 
        TextView bigText = (TextView) v.findViewById(R.id.bigText);
        bigText.setText("set from code");
    } else {
        // find and set view that are in the layout_two.xml
        TextView bigText2 = (TextView) v.findViewById(R.id.bigText2);
        bigText2.setText("big text 2 set from code");
    }

}

}

在阅读@kaaloraat的建议后,我已经解决了这个问题。我创建了一个片段作为根片段使用,该片段负责根据条件显示特定片段

下面是根片段类

public class TabsPagerAdapterMain extends FragmentPagerAdapter {

    int mNumOfTabs;

    public TabsPagerAdapterMain(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                YourStoryFragment yourStoryTab = new YourStoryFragment();
                return yourStoryTab;
            case 1:
                BrowseStoriesFragment browseStoriesTab = new BrowseStoriesFragment();
                return browseStoriesTab;
            case 2:
                ParseObject collegeObject;
                ParseUser user = ParseUser.getCurrentUser();
                collegeObject = user.getParseObject("college");
                if (collegeObject == null) {
                    CollegeSelectFragment collegeSelectFragment = new CollegeSelectFragment();
                    return collegeSelectFragment;
                } else {
                    YourCollegeFragment yourCollegeTab = new YourCollegeFragment();
                    return yourCollegeTab;
                }

            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}
public class XXXXXXMainTabbed extends AppCompatActivity {
    ViewPager viewPager;
    public Student xxxxxMainStudent;
    private boolean brandNewAccount = false;
    private CharSequence mTitle;
    private long firstTime = 0;

    public int yourStoryFragmentMenuId = 0;
    Fragment globalFragmentThatIsOpen;
    static TextView actionTitle;
    Spinner browse_spinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xxxxxx_main_tabbed);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        getSupportActionBar().setIcon(R.drawable.actionbar_space_between_icon_and_title);
        actionTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
        actionTitle.setTypeface(TypeFaceController.titleFace(getApplicationContext()));

       browse_spinner = (Spinner) toolbar.findViewById(R.id.browse_spinner);
        browse_spinner.setVisibility(View.GONE);


        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText(" Story").setIcon(R.drawable.browse_tab));
        tabLayout.addTab(tabLayout.newTab().setText(" Browse").setIcon(R.drawable.browse_tab));
        tabLayout.addTab(tabLayout.newTab().setText(" College").setIcon(R.drawable.colleges_tab));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        setTitle("Your Story");



        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent inte = new Intent(getApplicationContext(), WriteStory.class);
                startActivity(inte);
            }
        });

        viewPager = (ViewPager) findViewById(R.id.pager);
        final TabsPagerAdapterMain adapter = new TabsPagerAdapterMain
                (getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setOffscreenPageLimit (4);
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());

                switch (tab.getPosition()) {
                    case 0:
                        setTitle("Your Story");
                        browse_spinner.setVisibility(View.GONE);
                        break;
                    case 1:
                        setTitle("Browse");
                        browse_spinner.setVisibility(View.VISIBLE);
                        break;
                    case 2:
                        setTitle("Your College");
                        browse_spinner.setVisibility(View.GONE);
                        break;
                    default:
                        setTitle("XXXXXX");
                        browse_spinner.setVisibility(View.GONE);
                        break;
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

        // Grab the bundle information
        Intent intentFromPrevious = getIntent();
        Bundle extras = intentFromPrevious.getExtras();

        saveInPreferenceBoolean("LoggedIn",true);

        if (extras != null) {
            brandNewAccount = extras.getBoolean("brandNewAccount");

            xxxxxxMainStudent = (Student) intentFromPrevious.getParcelableExtra("studentObject");

        } else {

        }

        if (brandNewAccount == true) {
            Intent inte = new Intent(getApplicationContext(), WriteStory.class);
            brandNewAccount = false;
            startActivity(inte);
        }

        saveInPreference("firstName", "");
        saveInPreference("lastName", "");
        saveInPreference("countryFrom", "");
        saveInPreference("collegeExists", "");
        saveInPreference("username", "");
        saveInPreference("email", "");
        saveInPreference("password", "");
        saveInPreference("dateOfBirth", "");
        saveInPreference("collegeId", "");
        saveInPreference("courseId", "");
        saveInPreference("facebookAccount", "");

        //updating app version in the user table
        updateUserAppVersion();
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e("xxxxxxMainTabbed", "The onResume() event");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //getMenuInflater().inflate(R.menu.home_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {

        Log.e("postCounter", "" + xxxxxxMainStudent.getPostCount());
        if (isItYourStory() == true) {

            YourStoryFragment obj = new YourStoryFragment();
            if (obj.canEditItem == false) {
                obj.menuTitle = "EDIT";
            } else  {
                if (xxxxxxMainStudent.getPostCount() == 0) {
                    obj.menuTitle = "EDIT";
                }
                else {
                    obj.menuTitle = "DONE";
                }
            }

        }


        return super.onPrepareOptionsMenu(menu);
    }

    public Student getStudentDataFromMain() {
        return this.xxxxxxMainStudent;
    }

    public void displayView(int pos) {

    }

    private void updateUserAppVersion(){
        String appVersionName = getAppVersionName();

        ParseUser user = ParseUser.getCurrentUser();
        user.put("appVersion", appVersionName);

        user.saveInBackground(new SaveCallback() {
            public void done(com.parse.ParseException e) {
                if (e == null) {
                    // Save was successful!
                    Log.e("appVersion", "saved successfully");
                } else {
                    // Save failed. Inspect e for details.
                    Log.e("appVersion", "saved successfully");
                }
            }
        });
    }

    public String getAppVersionName() {
        PackageInfo pInfo = null;
        try {
            pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        String version = pInfo.versionName;

        return version;
    }

    public boolean isItYourStory() {

        if (viewPager.getCurrentItem() == 0) {
            return true;
        }
     return  false;
    }

    // method to save variable in preference
    public void saveInPreference(String name, String content) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString(name, content);
        editor.commit();
    }

    // getting content from preferences
    public String getFromPreference(String variable_name) {
        String preference_return;
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        preference_return = preferences.getString(variable_name, "");

        return preference_return;
    }

    // method to save variable in preference
    public void saveInPreferenceBoolean(String name, boolean content){
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putBoolean(name, content);
        editor.commit();
    }

    // getting content from preferences
    public boolean getFromPreferenceBoolean(String variable_name){
        boolean preference_return;
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        preference_return = preferences.getBoolean(variable_name, false);

        return preference_return;
    }

    public void setTitle(String title) {
        actionTitle.setText(title);
    }
}
public class RootCollegeFragment extends Fragment {

    private static final String TAG = "RootFragment";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        /* Inflate the layout for this fragment */
        View view = inflater.inflate(R.layout.root_fragment_college, container, false);

        ParseObject collegeObject;
        ParseUser user = ParseUser.getCurrentUser();
        collegeObject = user.getParseObject("college");
        if (collegeObject == null) {
            CollegeSelectFragment collegeSelectFragment= new CollegeSelectFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, collegeSelectFragment,null)
                    .addToBackStack(null)
                    .commit();
        } else {
            YourCollegeFragment yourCollegeFragment= new YourCollegeFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, yourCollegeFragment,null)
                    .addToBackStack(null)
                    .commit();
        }



        return view;
    }

    @Override
    public void onResume() {
        Log.e("RootCollegeFragment", "onResume of RootCollegeFragment");
        ParseObject collegeObject;
        ParseUser user = ParseUser.getCurrentUser();
        collegeObject = user.getParseObject("college");
        if (collegeObject == null) {
            CollegeSelectFragment collegeSelectFragment= new CollegeSelectFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, collegeSelectFragment,null)
                    .addToBackStack(null)
                    .commit();
        } else {
            YourCollegeFragment yourCollegeFragment= new YourCollegeFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, yourCollegeFragment,null)
                    .addToBackStack(null)
                    .commit();
        }
        super.onResume();
    }


}
public class TabsPagerAdapterMain extends FragmentPagerAdapter {

    int mNumOfTabs;

    public TabsPagerAdapterMain(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                YourStoryFragment yourStoryTab = new YourStoryFragment();
                return yourStoryTab;
            case 1:
                BrowseStoriesFragment browseStoriesTab = new BrowseStoriesFragment();
                return browseStoriesTab;
            case 2:
                RootCollegeFragment rootCollegeFragment = new RootCollegeFragment();
                return rootCollegeFragment;

            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}
我让适配器只调用根片段,而根片段将决定打开该片段

适配器代码

public class TabsPagerAdapterMain extends FragmentPagerAdapter {

    int mNumOfTabs;

    public TabsPagerAdapterMain(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                YourStoryFragment yourStoryTab = new YourStoryFragment();
                return yourStoryTab;
            case 1:
                BrowseStoriesFragment browseStoriesTab = new BrowseStoriesFragment();
                return browseStoriesTab;
            case 2:
                ParseObject collegeObject;
                ParseUser user = ParseUser.getCurrentUser();
                collegeObject = user.getParseObject("college");
                if (collegeObject == null) {
                    CollegeSelectFragment collegeSelectFragment = new CollegeSelectFragment();
                    return collegeSelectFragment;
                } else {
                    YourCollegeFragment yourCollegeTab = new YourCollegeFragment();
                    return yourCollegeTab;
                }

            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}
public class XXXXXXMainTabbed extends AppCompatActivity {
    ViewPager viewPager;
    public Student xxxxxMainStudent;
    private boolean brandNewAccount = false;
    private CharSequence mTitle;
    private long firstTime = 0;

    public int yourStoryFragmentMenuId = 0;
    Fragment globalFragmentThatIsOpen;
    static TextView actionTitle;
    Spinner browse_spinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xxxxxx_main_tabbed);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        getSupportActionBar().setIcon(R.drawable.actionbar_space_between_icon_and_title);
        actionTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
        actionTitle.setTypeface(TypeFaceController.titleFace(getApplicationContext()));

       browse_spinner = (Spinner) toolbar.findViewById(R.id.browse_spinner);
        browse_spinner.setVisibility(View.GONE);


        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText(" Story").setIcon(R.drawable.browse_tab));
        tabLayout.addTab(tabLayout.newTab().setText(" Browse").setIcon(R.drawable.browse_tab));
        tabLayout.addTab(tabLayout.newTab().setText(" College").setIcon(R.drawable.colleges_tab));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        setTitle("Your Story");



        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent inte = new Intent(getApplicationContext(), WriteStory.class);
                startActivity(inte);
            }
        });

        viewPager = (ViewPager) findViewById(R.id.pager);
        final TabsPagerAdapterMain adapter = new TabsPagerAdapterMain
                (getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setOffscreenPageLimit (4);
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());

                switch (tab.getPosition()) {
                    case 0:
                        setTitle("Your Story");
                        browse_spinner.setVisibility(View.GONE);
                        break;
                    case 1:
                        setTitle("Browse");
                        browse_spinner.setVisibility(View.VISIBLE);
                        break;
                    case 2:
                        setTitle("Your College");
                        browse_spinner.setVisibility(View.GONE);
                        break;
                    default:
                        setTitle("XXXXXX");
                        browse_spinner.setVisibility(View.GONE);
                        break;
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

        // Grab the bundle information
        Intent intentFromPrevious = getIntent();
        Bundle extras = intentFromPrevious.getExtras();

        saveInPreferenceBoolean("LoggedIn",true);

        if (extras != null) {
            brandNewAccount = extras.getBoolean("brandNewAccount");

            xxxxxxMainStudent = (Student) intentFromPrevious.getParcelableExtra("studentObject");

        } else {

        }

        if (brandNewAccount == true) {
            Intent inte = new Intent(getApplicationContext(), WriteStory.class);
            brandNewAccount = false;
            startActivity(inte);
        }

        saveInPreference("firstName", "");
        saveInPreference("lastName", "");
        saveInPreference("countryFrom", "");
        saveInPreference("collegeExists", "");
        saveInPreference("username", "");
        saveInPreference("email", "");
        saveInPreference("password", "");
        saveInPreference("dateOfBirth", "");
        saveInPreference("collegeId", "");
        saveInPreference("courseId", "");
        saveInPreference("facebookAccount", "");

        //updating app version in the user table
        updateUserAppVersion();
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e("xxxxxxMainTabbed", "The onResume() event");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //getMenuInflater().inflate(R.menu.home_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {

        Log.e("postCounter", "" + xxxxxxMainStudent.getPostCount());
        if (isItYourStory() == true) {

            YourStoryFragment obj = new YourStoryFragment();
            if (obj.canEditItem == false) {
                obj.menuTitle = "EDIT";
            } else  {
                if (xxxxxxMainStudent.getPostCount() == 0) {
                    obj.menuTitle = "EDIT";
                }
                else {
                    obj.menuTitle = "DONE";
                }
            }

        }


        return super.onPrepareOptionsMenu(menu);
    }

    public Student getStudentDataFromMain() {
        return this.xxxxxxMainStudent;
    }

    public void displayView(int pos) {

    }

    private void updateUserAppVersion(){
        String appVersionName = getAppVersionName();

        ParseUser user = ParseUser.getCurrentUser();
        user.put("appVersion", appVersionName);

        user.saveInBackground(new SaveCallback() {
            public void done(com.parse.ParseException e) {
                if (e == null) {
                    // Save was successful!
                    Log.e("appVersion", "saved successfully");
                } else {
                    // Save failed. Inspect e for details.
                    Log.e("appVersion", "saved successfully");
                }
            }
        });
    }

    public String getAppVersionName() {
        PackageInfo pInfo = null;
        try {
            pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        String version = pInfo.versionName;

        return version;
    }

    public boolean isItYourStory() {

        if (viewPager.getCurrentItem() == 0) {
            return true;
        }
     return  false;
    }

    // method to save variable in preference
    public void saveInPreference(String name, String content) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString(name, content);
        editor.commit();
    }

    // getting content from preferences
    public String getFromPreference(String variable_name) {
        String preference_return;
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        preference_return = preferences.getString(variable_name, "");

        return preference_return;
    }

    // method to save variable in preference
    public void saveInPreferenceBoolean(String name, boolean content){
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putBoolean(name, content);
        editor.commit();
    }

    // getting content from preferences
    public boolean getFromPreferenceBoolean(String variable_name){
        boolean preference_return;
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        preference_return = preferences.getBoolean(variable_name, false);

        return preference_return;
    }

    public void setTitle(String title) {
        actionTitle.setText(title);
    }
}
public class RootCollegeFragment extends Fragment {

    private static final String TAG = "RootFragment";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        /* Inflate the layout for this fragment */
        View view = inflater.inflate(R.layout.root_fragment_college, container, false);

        ParseObject collegeObject;
        ParseUser user = ParseUser.getCurrentUser();
        collegeObject = user.getParseObject("college");
        if (collegeObject == null) {
            CollegeSelectFragment collegeSelectFragment= new CollegeSelectFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, collegeSelectFragment,null)
                    .addToBackStack(null)
                    .commit();
        } else {
            YourCollegeFragment yourCollegeFragment= new YourCollegeFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, yourCollegeFragment,null)
                    .addToBackStack(null)
                    .commit();
        }



        return view;
    }

    @Override
    public void onResume() {
        Log.e("RootCollegeFragment", "onResume of RootCollegeFragment");
        ParseObject collegeObject;
        ParseUser user = ParseUser.getCurrentUser();
        collegeObject = user.getParseObject("college");
        if (collegeObject == null) {
            CollegeSelectFragment collegeSelectFragment= new CollegeSelectFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, collegeSelectFragment,null)
                    .addToBackStack(null)
                    .commit();
        } else {
            YourCollegeFragment yourCollegeFragment= new YourCollegeFragment();
            this.getFragmentManager().beginTransaction()
                    .replace(R.id.root_frame, yourCollegeFragment,null)
                    .addToBackStack(null)
                    .commit();
        }
        super.onResume();
    }


}
public class TabsPagerAdapterMain extends FragmentPagerAdapter {

    int mNumOfTabs;

    public TabsPagerAdapterMain(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                YourStoryFragment yourStoryTab = new YourStoryFragment();
                return yourStoryTab;
            case 1:
                BrowseStoriesFragment browseStoriesTab = new BrowseStoriesFragment();
                return browseStoriesTab;
            case 2:
                RootCollegeFragment rootCollegeFragment = new RootCollegeFragment();
                return rootCollegeFragment;

            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}
就是这样!简单干净


注意:也是非常有用的

尝试startActivityForResult(),然后在result intent和onActivityResult()中设置一个标志,您可能会通知适配器。使用该标志确定应从TabsPagerAdapterMain返回哪个片段。@kevz Iu在适配器中已具有该条件只需根据该标志更改该条件即可。Hi,adapter.notifyDataSetchanged();当调用onResume()时,不会替换ViewPager中的片段遵循我在回答中提到的链接。只是一个lil解决方法。。如果上述解决方案不是您想要的,请尝试以下操作:在更改ParseObject后,将
FragmentPagerAdapter
更改为
FragmentStatePagerAdapter
,并调用
adapter.notifyDataSetChanged()

还可以在您的viewpager上使用
setOffscreenPageLimit(1)
explicity。如果
notifyDataSetChanged()
不起作用。。将适配器重置为查看页面。设置适配器(适配器)