2013-04-27 112 views
1

我有一个在选项卡中有不同片段的活动,我想覆盖后退按钮,以便它调用将列表视图更新到父文件夹列表的片段中的方法。 现在我的主要活动做出这样的:覆盖片段中的后退按钮

@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

有人可以帮助我,告诉我的方式,我可以解决这个问题?

编辑:

我会试着更好地解释,我已经片段内一个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(); 

    } 

现在我想如果选择了后退按钮返回到父文件夹,但不知何故,我得到的错误,当我尝试调用从活动onBackPressed片段的方法。我正在使用一个静态变量string_str来存储我的片段内我要更新列表的父文件夹的路径,但不知何故我无法获得更新的列表使用相同的updateListViewFolder方法

+0

如何back_str初始化? – 2013-04-27 16:04:19

+0

根据您提供的信息很少,如果您将back_str作为参数传递给函数进行修改,则这不适用于java。改用public void方法来设置值。 – Neoh 2013-04-27 16:12:12

+0

back_str被初始化为一个全局变量并且等于“/ storage /”。问题仍然不在于我如何传递变量,因为else子句从未被调用过。在我调用片段的方法时(onBackPressed),在活动中以某种方式它总是返回“/ storage /”而不是另一个路径,因为在打开另一个文件夹时应修改back_str – Pievis 2013-04-28 09:07:53

回答

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 
    } 
}