0

我在操作栏上做了一个下拉项目,就像这里所说的 如何在操作栏上添加下拉项目, 所以我有一个 menu.xml

<item
android:id="@+id/menuSpinner"
android:showAsAction="ifRoom"
android:actionLayout="@layout/options"  />

和 options.xml

<?xml version="1.0" encoding="utf-8"?>
<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/my_array" />

和 strings.xml 中的数组

<string-array name="my_array">
    <item>ONE</item>
    <item>TWO</item>
    <item>THREE</item>
</string-array>

Activity 中的一切看起来都很好。

请帮忙,我应该如何获得 onClick 消息,或者我如何知道在操作栏上选择了(可见)什么项目。可能是这段代码中的东西..?

if (item.getItemId() == R.id.menuSpinner) {
                      ...
            }

UPD:现在我做到了

  1. 在 options.xml 中为我的微调器添加一个 id

  2. 在代码中写了这个

    Spinner sp = (Spinner) findViewById(R.id.spinner_menu);

    if (sp.getSelectedItemId()==0) {

    ...

    }

这适合 mi,因为我不需要立即对用户微调器点击采取行动。

4

3 回答 3

2

尝试这个。

  1. 将项目添加到微调器列表
  2. 实现 onNavigationItemSelected() 分别获取项目位置和项目 ID。

例子:

@覆盖

public boolean onNavigationItemSelected(int itemPosition, long itemId) {
    switch (itemPosition) {
    case 0:
        Toast.makeText(getApplicationContext(), "location 1",
                Toast.LENGTH_SHORT).show();

    return true;
    case 1:
        Toast.makeText(getApplicationContext(), "location 2",
                Toast.LENGTH_SHORT).

    default:
        Toast.makeText(getApplicationContext(), "location 4",
                Toast.LENGTH_SHORT).show();
    }
    return false;
}
于 2013-12-01T01:35:42.857 回答
1

将下拉菜单添加到操作栏

详细解释

在此处输入图像描述

private void InitializeActionBar()
{
    ActionBar.NavigationMode = ActionBarNavigationMode.List;

    ActionBar.SetListNavigationCallbacks(
        new NavigationSpinnerAdapter(this),
        new NavigationListener());
}

public class NavigationSpinnerAdapter : BaseAdapter
{
    private List<Java.Lang.Object> _spinnerItems;
    private LayoutInflater _layoutInflater;

    public NavigationSpinnerAdapter(Context context)
    {
        _spinnerItems = new List<Java.Lang.Object>();

        // Create java strings for this sample.
        // This saves a bit on JNI handles.
        _spinnerItems.Add(new Java.Lang.String("Sample item 1"));
        _spinnerItems.Add(new Java.Lang.String("Sample item 2"));
        _spinnerItems.Add(new Java.Lang.String("Sample item 3"));

        // Retrieve the layout inflater from the provided context
        _layoutInflater = LayoutInflater.FromContext(context);
    }

    public override Object GetItem(int position)
    {
        return _spinnerItems[position];
    }

    public override long GetItemId(int position)
    {
        return position;
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var view = convertView;

        // Try to reuse views as much as possible.
        // It is alot faster than inflating new views all the time
        // and it saves quite a bit on memory usage aswell.
        if (view == null)
        {
            // inflate a new layout for the view.
            view = _layoutInflater.Inflate(Resource.Layout.SpinnerItem, parent, false);
        }

        var textView = view.FindViewById<TextView>(Resource.Id.DisplayTextLabel);
        textView.Text = _spinnerItems[position].ToString();

        return view;
    }

    public override int Count
    {
        get { return _spinnerItems.Count; }
    }
}

public class NavigationListener: Java.Lang.Object, ActionBar.IOnNavigationListener
{
    public bool OnNavigationItemSelected(int itemPosition, long itemId)
    {
        // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
        // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        //catch clicked item
        // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        return false;
    }
}
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/menu_search" android:title="Save" android:showAsAction="always"
        android:actionViewClass="android.widget.SearchView"/>
</menu>

public override bool OnCreateOptionsMenu(IMenu menu)
{
    MenuInflater.Inflate(Resource.Menu.ActionItems, menu);

    var searchView = (SearchView)menu.FindItem(Resource.Id.menu_search).ActionView;
    searchView.SearchClick += OnSearchClicked;

    return true;
}
于 2012-11-23T21:41:24.747 回答
0

如果您只是想将其用作子菜单,您是否查看过子菜单 API?

有关此问题的更多信息,请参阅此问题。最初的问题有一个示例,说明如何从您的菜单 xml 开始执行此操作,然后详细介绍如何从数据源动态生成菜单项。如果您只有静态子菜单项要呈现(似乎是这种情况,因为您有一个字符串数组在您的问题中定义它们)您应该能够在初始菜单 xml 定义处停止,然后像处理子菜单项点击一样它们是任何其他菜单项。

于 2012-11-23T22:47:58.583 回答