- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我创建了一个简单的 ViewPager TabLayout 以在 3 个选项卡中显示 3 个 fragment 。现在,如果用户打开另一个 Activity 并进行一些更改,然后返回到包含 ViewPager 的 Activity ,则应将第 3 个 fragment 替换为新 fragment 。我不希望用户再看到旧的第三个 fragment 。
当用户从另一个 Activity 返回到 ViewPager Activity 时,onResume()
方法被调用,由此我们可以知道是否替换第 3 个 fragment 。
这是 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;
}
}
包含 ViewPager 的 Activity:
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);
}
}
当调用 Activity 的 onResume()
时,我应该如何在第 3 个选项卡中设置 YourCollegeFragment?
最佳答案
您可能想要更改 Fragment 中膨胀的布局,而不是替换框架本身。在 fragment 内,根据您的条件扩充布局并相应地扩充 View 。这是我试过的示例代码。
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");
}
}
关于java - 根据特定条件替换 ViewPager fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35402018/
我有一个像这样的 fragment 栈 F1 -> F2 -> F3 -> F4 -> F5 现在我需要删除 F2、F3、F4 fragment 。 我需要如果我从 F5 fragment 按下后退按
我需要帮助来理解以下场景的工作原理以及如何实现结果。 我有一个名为 ShoppingCart 的类。它有一个名为 addItemsToShoppingCartFromPreviousOrder 的方法
我有一个包含 ViewPager 的 fragment 。这个 ViewPager 显然是由其他 Fragments 填充的。 我的问题是,ViewPager 中的 Fragment 是否有任何方法(
所以我正在实现一个 FragmentActivity 并尝试添加一个 fragment ,但是我遇到了多个问题。我以前做过这个,实际上我使用的代码与上一个项目(它工作的地方)相同,但由于某种原因它在这
Closed. This question needs details or clarity。它当前不接受答案。
我想将 Android X fragment (androidx.fragment.app.Fragment) 转换为 Android native fragment (android.app.Fra
假设我有一个包含 10 列文本类型 (20) 的 SQLite 表。 ListFragment 将从数据库中提取 4 列并使用 SimpleCursorAdapter 显示在列表中。 选择后,List
我有一个对话框 fragment ,我为延迟初始化创建了一个类。当我显示对话框时,它显示正常。但是,当我关闭对话框时,它崩溃的原因是: fragment 与 fragment 管理器无关。 我也尝试过
我想在 View 分页器更改为 fragment 时刷新该 fragment 。 package com.mcivisoft.rcbeam; import android.os.Bundle; imp
我有一个名为的 Activity MainActivity 我在容器 R.id.mainContainer 中添加了 fragment “BenefitFragment”。 在 BenefitFrag
所以我有这个 ClientListView,效果很好,可以显示客户,我可以单击一个客户并在右侧获取他们的详细信息(在我的第二个 fragment 中)。由此处的布局定义: 这很好用,但后来我
我试过这段代码,但点击第一个 fragment 中的按钮并没有改变第二个 fragment 中的字符串值。 这是第一个 fragment 的 kotlin 文件。它有两个按钮,点击它们可以更改字符串值
我有以下情况:我打开 fragment A 和目标,通过按钮的单击事件转到 fragment B。当我在 fragment B 中并点击后退按钮(为了返回 fragment A) 我想将一些参数传递给
我制作了一个 NavigationDrawer fragment ,其中包含 Home、Settings、Feedback 等项目。 home 项在点击 home 时应该打开,home 是在应用程序启
我正在一个接一个地替换 2 个 fragment ,两个 fragment 都有不同的选项菜单。当我替换第二个 fragment 时,它也显示第一个 fragment 的菜单。 setHasOptio
我有问题: android.app.Fragment$InstantiationException: Unable to instantiate fragment ${packageName}.${a
我正在研究 fragment 转换。当我用第二个 fragment 替换第一个 fragment 时,它出现在第一个 fragment 的下方。我希望它移动到第一个 fragment 之上。我该怎么做
我在抽屉导航里总共有 12 个 fragment 。每个 fragment 都有 volley 方法。每个 fragment 都显示自己的 Volley 响应,除了 position = 1 和 po
我在我的 Activity 中使用了两个 fragment 。最初我将向 Activity 添加一个 fragment 。然后在第一个 fragment 中使用监听器我想用第二个 fragment 替
我正在实现一个“fragments-101”程序,当相应的按钮被点击时我会替换一个 fragment 。然而,下面的事情发生了: 为什么会这样?为什么初始 fragment 没有被完全替换?MainA
我是一名优秀的程序员,十分优秀!