覆盖片段中的后退按钮
Posted
技术标签:
【中文标题】覆盖片段中的后退按钮【英文标题】:overriding back button in fragment 【发布时间】:2013-04-21 16:11:45 【问题描述】:我在选项卡选择中有一个包含不同片段的活动,我想覆盖后退按钮,以便它调用片段中的一个方法,将列表视图更新为父文件夹列表。 现在我已经在主要活动中做了这个:
@Override
public void onBackPressed()
ActionBar actionbar = getActionBar();
if(actionbar.getSelectedTab().getPosition() == 0)
if(!fla.onBackPressed())
super.onBackPressed();
片段中的这个:
public boolean onBackPressed()
if(back_str.equals(MAIN_POINT))
Log.v("A", "BACK FIRST" + back_str);
return false;
else
Log.v("A", "BACK PREMUTO");
updateListViewFolder(back_str);
return true; //torna indietro nella view
back_str 是类中的全局字符串,引用列表视图中的当前父目录,每次打开文件夹时都会更新。
似乎当我按下后退按钮时,back_str 总是 = null
有人可以帮助我并告诉我解决此问题的方法吗?
编辑:
我会尝试更好地解释我,我在片段中有一个列表视图,用于导航到手机的文件夹,从 /storage/ 开始,当我按下文件夹时,它会打开更新调用此方法的列表视图:
public void updateListViewFolder(String newPath)
ArrayList<Song> songsListTMP = new SongManager().getPlayList(newPath); //aggiungo tutte le canzoni
songsListData.removeAll(songsListData);
//AGGIUNGO LA CARTELLA PRECEDENTE
File here = new File(newPath);
back_str = here.getParent();
Log.v("A", "S:"+back_str);
Song back = new Song(back_str, true); //Sono directory
songsListData.add(back);
for(int i = 0; i < songsListTMP.size(); i++)
Song song = songsListTMP.get(i);
songsListData.add(song); //tengo un attimo separate
for(File dir : here.listFiles() )
if(dir.isDirectory() && dir.canRead())
Song sdir = new Song(dir.getPath(), true); //Sono directory
songsListData.add(sdir);
getListView().invalidateViews();
现在,如果选择了后退按钮,我想返回到父文件夹,但是当我尝试从活动中调用片段的 onBackPressed 方法时,我得到了错误。我正在使用静态变量 string_str 将要更新列表的父文件夹的路径存储在我的片段中,但不知何故我无法使用相同的 updateListViewFolder 方法更新列表
【问题讨论】:
back_str是如何初始化的? 根据您提供的信息很少,如果您将 back_str 作为参数传递给函数以对其进行修改,这在 java 中将不起作用。改为使用公共 void 方法来设置值。 back_str 初始化为全局变量,等于“/storage/”。问题仍然不在于我如何传递变量,因为永远不会调用 else 子句。在活动中,当我调用片段的方法(onBackPressed)时,它总是返回“/storage/”而不是另一个路径,因为当我打开另一个文件夹时应该修改 back_str 【参考方案1】:好的,我发现了错误。
我没有在操作栏选项卡中调用片段实例的方法,我只是在调用该类的方法。
我让我的班级 MyTabListener 为我的片段设置一个标签,以便我可以访问它
(FolderListActivity) getFragmentManager().findFragmentByTag("F1");
这里是类:
class MyTabListener implements ActionBar.TabListener
private Fragment mFragment;
public MyTabListener(Fragment fragment)
mFragment = fragment;
public void onTabSelected(Tab tab, FragmentTransaction ft)
if(mFragment instanceof FolderListActivity)
ft.add(mFragment, "F1"); //mi occupo di settare un tag per recuperare la specifica istanza del fragment
else
ft.add(mFragment, "F0");
public void onTabUnselected(Tab tab, FragmentTransaction ft)
FolderListActivity f1 = (FolderListActivity) getFragmentManager().findFragmentByTag("F1"); //accedo allo specifico fragment
if(f1 != null)
f1.cleanView();
ft.remove(mFragment);
public void onTabReselected(Tab tab, FragmentTransaction ft)
// do nothing
【讨论】:
以上是关于覆盖片段中的后退按钮的主要内容,如果未能解决你的问题,请参考以下文章
覆盖 UINavigationController 中的后退按钮