2013-04-27 143 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 
    } 
}