我有MainActivty
课程DrawerLayout
,所以我动态添加Fragments
。
public void selectDrawerItem(MenuItem menuItem) {
Fragment fragment = null;
Class fragmentClass;
switch(menuItem.getItemId()) {
case R.id.nav_websites:
fragmentClass = ScreenOne.class;
break;
case R.id.nav_commands:
fragmentClass = ScreenTwo.class;
break;
case R.id.nav_help:
fragmentClass = ScreenThree.class;
break;
default:
fragmentClass = ScreenOne.class;
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
setTitle(menuItem.getTitle());
mDrawerLayout.closeDrawers();
}
在第一个片段中
public class ScreenOne extends Fragment implements Button.OnClickListener
我有一个功能
public void loadText() {
SharedPreferences myPrefs;
myPrefs = getActivity().getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
siteName1.setText(myPrefs.getString("siteName1_txt", "").toString());
siteURL1.setText(myPrefs.getString("siteURL1_txt", "").toString());
}
在我的mainActivity类中,在onCreate方法中,我想调用loadText()方法,我试过了
ScreenOne fragment = new ScreenOne();
fragment.loadText();
但那没用。我无法通过ID或标签找到片段,因为它们不会惹恼任何片段。拜托,非常感谢任何帮助或建议。
答案 0 :(得分:1)
您的代码存在几个大问题,这些是我看到的问题:
try
创建了一个Fragment实例,然后使用它even if it fails 话虽如此,对于这个特定问题最简单的解决方法是只保证当前屏幕时调用loadText方法(即,在更改它时执行此操作或保留对当前项的引用并使用instanceOf )
public void selectDrawerItem(MenuItem menuItem) {
...
try {
fragment = (Fragment) fragmentClass.newInstance();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
...
if (ScreenOne.class.equals(fragmentClass)) {
fragment.loadText();
}
} catch (Exception e) {
e.printStackTrace();
}
}
但是我想说清楚,这不是最干净的解决方案,我建议你坚持使用single responsibility并让片段负责加载自己的文本,而活动负责从中传递值共享首选项作为参数(或通过接口callback pattern)。这样可以避免在片段准备好之前调用loadText的任何更改。
答案 1 :(得分:0)
您可以使用类似
访问YourActivity的任何公共方法 .new-hr{
width: 20%
}
只有谁附加到YourActivity
答案 2 :(得分:-1)
您可以使用该活动的上下文调用Activity
方法,例如:
((MainActivity)context).updateWishlistCount();
希望这能帮到你!