2012-06-29 54 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

相关问题