Android 重写片段中的后退按钮
我在选项卡选择中有一个具有不同片段的活动,我希望覆盖“后退”按钮,以便它在片段中调用一个方法,将listview更新为父文件夹列表。 目前,我已在主要活动中做了如下说明:Android 重写片段中的后退按钮,android,button,fragment,back,Android,Button,Fragment,Back,我在选项卡选择中有一个具有不同片段的活动,我希望覆盖“后退”按钮,以便它在片段中调用一个方法,将listview更新为父文件夹列表。 目前,我已在主要活动中做了如下说明: @Override public void onBackPressed() { ActionBar actionbar = getActionBar(); if(actionbar.getSelectedTab().getPosition(
@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是类中引用listview中当前父目录的全局字符串,每次打开文件夹时都会更新
似乎当我按下后退按钮时,back\u str总是=null
有人能帮我,告诉我解决这个问题的方法吗
编辑:
我将尝试更好地解释我,我在片段中有一个listview,用于导航到手机的文件夹,从/storage/开始,当我按下文件夹时,它会打开并更新listview,调用以下方法:
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();
}
public void updateListViewFolder(字符串newPath)
{
ArrayList songsListTMP=new SongManager().getPlayList(newPath);//aggiungo tutte le canzoni
removeAll(songsListData);
//卡泰拉先例酒店
File here=新文件(newPath);
back_str=here.getParent();
Log.v(“A”,“S:+back_str”);
Song back=新歌(back_str,true);//Sono目录
songsListData.add(返回);
对于(int i=0;i
现在,如果选择了后退按钮,我想返回到父文件夹,但是当我试图调用活动中片段的onBackPressed方法时,不知何故我会出错。我正在使用一个静态变量string_str在片段中存储要更新列表的父文件夹的路径,但不知何故,我无法使用相同的updateListViewFolder方法更新列表。好的,我发现了错误。
我没有在actionbar选项卡中调用片段实例的方法,我只是调用该类的方法。
我让我的类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
}
}
好的,我发现了错误。
我没有在actionbar选项卡中调用片段实例的方法,我只是调用该类的方法。
我让我的类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
}
}
back\u str是如何初始化的?基于您提供的信息太少,如果您将\u str作为参数传递给一个函数来修改它,这在java中是不起作用的。改为使用public void方法设置值。back_str初始化为全局变量,等于“/storage/”。问题仍然不是如何传递变量,因为从来没有调用else子句。不知何故,在活动中,当我调用片段(onBackPressed)的方法时,它总是返回“/storage/”而不是另一个路径,因为当我打开另一个文件夹时,back\u str应该被修改。back\u str是如何初始化的?基于您提供的信息太少,如果您将back\u str作为参数传递给函数来修改它,这在java中是不起作用的。改为使用public void方法设置值。back_str初始化为全局变量,等于“/storage/”。问题仍然不是如何传递变量,因为从来没有调用else子句。不知何故,在活动中,当我调用片段的方法(onBackPressed)时,它总是返回“/storage/”而不是另一个路径,因为当我打开另一个文件夹时,back\u str应该被修改