Java 根据特定条件替换ViewPager片段
我创建了一个简单的ViewPager表格布局,在3个选项卡中显示3个片段。现在,如果用户打开另一个活动并进行一些更改,然后返回到包含ViewPager的活动,则第三个片段应替换为新片段。我不希望用户再看到旧的第三个片段 当用户从另一个活动返回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 {
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()
不起作用。。将适配器重置为查看页面。设置适配器(适配器)