2012-06-29 119 views
3

如何在點擊時在操作欄中的下拉導航列表中更改項目的視圖? 點擊後,我希望顯示的項目顯示另一個視圖(在佈局中它被設置爲不可見)。 我從ActionBar.OnNavigationListener得到了onNavigationItemSelected方法,但是它沒有通過點擊項目的視圖,而只是項目在導航微調器中的位置。換句話說,爲什麼我不能從操作欄微調器中獲取所選視圖的引用? (如我可以從OnItemClickListener()listview onItemClick查看)操作欄如何更改對項目的視圖點擊

回答

0

我只是想弄明白這一點,並設法追蹤它。

使用setSelectedNavigationItem來做到這一點。

+1

謝謝,但方法setSelectedNavigationItem只是設置在操作欄中選中的項目微調導航。我需要的是需要一種方法來獲取對微調器中所選項目視圖的引用(在動作欄微調器中顯示的那個視圖),然後根據需要進行修改。 – VladacusB

0

與您navigationListener,你可以試試這個:

你,然後通過適配器檢索該項目。我唯一的問題是現在修改檢索的參考內容。我似乎無法工作。

我希望它可以幫助

+0

是的,這是行不通的,好像它在正確的軌道上,雖然 – CQM

2

ActionBarSpinner資源ID是:android:id/action_bar_spinner

獲取Spinner資源ID:

int resId = getResources().getIdentifier("action_bar_spinner", "id", "android"); 

使用的資源ID獲取參考Spinner部件:

final Spinner spinner = (Spinner) getWindow().getDecorView().findViewById(resId); 

現在,您將能夠獲得訪問所選視圖:

CheckedTextView v = (CheckedTextView) spinner.getSelectedView(); 

您可以修改所選擇的視馬上在OnNavigationListener

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    getFragmentManager().beginTransaction() 
    .replace(android.R.id.content, new MyFragment()) 
    .commit(); 

    SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, 
      R.array.action_list, android.R.layout.simple_spinner_dropdown_item); 

    getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 

    int resId = getResources().getIdentifier("action_bar_spinner", "id", "android"); 
    final Spinner spinner = (Spinner) getWindow().getDecorView().findViewById(resId); 

    this.getActionBar().setListNavigationCallbacks(mSpinnerAdapter, new ActionBar.OnNavigationListener() { 

     @Override 
     public boolean onNavigationItemSelected(int itemPosition, 
       long itemId) { 
      CheckedTextView v = (CheckedTextView) spinner.getSelectedView(); 
      // Modify selected view. 
      return true; 
     } 

    }); 
} 
+0

你是如何找到資源ID是什麼? – CQM

+0

使用DDMS'轉儲視圖層次結構「功能。 –

+0

resId = 0。我也使用真正的操作欄(沒有compat模式的東西) – CQM

相關問題