如何在单击时更改操作栏中下拉导航列表中项目的 View ?
单击后,我希望显示的项目显示另一个 View (在布局中它被设置为不可见)。
我从 ActionBar.OnNavigationListener
中获得了 onNavigationItemSelected
方法,但它不会传递所单击项目的 View ,而只会传递项目在导航微调器中的位置。或者换句话说,为什么我不能从操作栏微调器中获取对选定 View 的引用? (就像我可以通过 OnItemClickListener()
中的 listview onItemClick
获取 View )
最佳答案
ActionBar
的 Spinner
资源 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);
现在您将能够访问所选 View :
CheckedTextView v = (CheckedTextView) spinner.getSelectedView();
您可以立即在 OnNavigationListener
中修改所选 View :
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;
}
});
}
关于android - 操作栏如何更改项目单击的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11259482/