2013-01-11 27 views
1

我有一個菜單項,其中有一個微調佈局,並且它正好出現在我的操作欄的菜單中。然而,當我點擊微調時,什麼都沒有發生。我在onOptionsItemSelected中有日誌消息,我在logcat中看不到任何消息。下面是我的代碼片段:點擊一個微調菜單項不會彈出微調列表

菜單佈局

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/menu_item_1" 
      android:orderInCategory="100" 
      android:showAsAction="always" 
      android:actionLayout="@layout/spinner_layout" /> 
</menu> 

微調按鈕佈局

<?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:background="@drawable/spinner_drawable"> 
</Spinner> 

MainActivity.java

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    spinner = (Spinner) menu.findItem(R.id.menu_item_1).getActionView(); 

    MySpinnerAdapter spinnerAdapter = new MySpinnerAdapter(this); 
    spinner.setAdapter(spinnerAdapter); 
    spinner.setOnItemSelectedListener(spinnerAdapter); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    log.error("ON OPTIONS ITEM SELECTED FOR ITEM: " + item.getItemId()); 

    switch (item.getItemId()) 
    { 
     case R.id.menu_item_1: 
      log.error("ON OPTIONS ITEM SELECTED - SPINNER MENU ITEM SELECTED"); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

MySpinnerAdapter.java

@Singleton 公共類MySpinnerAdapter擴展ArrayAdapter實現SpinnerAdapter,OnItemSelectedListener {

@Inject 
public TopbarErrorSpinnerAdapter(Context context) { 
    super(context, R.layout.my_spinner_item); 
    this.values = Collections.synchronizedList(new ArrayList<MySpinnerRowEntry>()); 
    this.context = context; 
    this.setDropDownViewResource(R.layout.my_spinner_item); 
} 

@Override 
public int getCount() { 
    return values.size(); 
} 

@Override 
public MySpinnerRowEntry getItem(int position) { 
    return values.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View view, ViewGroup viewGroup) { 

    View row = View.inflate(context, R.layout.my_spinner_item, null); 
    ImageView image = (ImageView) row.findViewById(R.id.my_spinner_item_icon); 

    return image; 
} 

@Override 
public View getDropDownView(int position, View convertView, ViewGroup parent) { 

    final int rowPosition = position; 

    View row = View.inflate(context, R.layout.my_spinner_item, null); 

    TextView title = (TextView) row.findViewById(R.id.my_spinner_item_title); 
    title.setText(values.get(position).getTitle()); 

    TextView message = (TextView) row.findViewById(R.id.my_spinner_item_message); 
    message.setText(values.get(position).getMessage()); 

    row.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mySpinnerAdapterlistener.mySpinnerItemSelected(values.get(rowPosition).getType()); 
     } 
    }); 

    return row; 
} 

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    MainActivity activity = (MainActivity) context; 
    (activity).onOptionsItemSelected((MenuItem) activity.findViewById(R.id.menu_item_1)); 
} 

@Override 
public void onNothingSelected(AdapterView<?> parent) { 

} 

}

我也不能確定如何觸發微調,如果所選的菜單項是微調。我有一個相同的微調工作在以前的活動,不包括一個ActionBar。由於升級到SDK 14後我的應用程序發生了變化,我知道必須將微調器添加到ActionBar的Menu中。

謝謝大家提前的幫助。

回答

1

我設法解決我的問題使用ActionProvider。我必須爲xml代碼中的菜單項定義一個ActionProvider,並實現提供者。在OnCreateActionView中,這是我實例化微調器適配器並將其分配給微調器的地方。 有一點需要指出,OnCreateActionView()方法已被棄用,另一個實現OnCreateActionView(MenuItem menuItem)可用。但是,如果您希望代碼使用API​​ 14和API 16,則必須同時實現這兩種方法(相同)。 希望這可以幫助別人......

0

像微調器的聲音正在消耗觸摸事件。在MySpinnerAdapter#onItemSelected中,您可能必須以編程方式選擇菜單項。手動撥打myActivity.onOptionsItemSelected(R.id.menu_item_1)

+0

謝謝你提供一個答案。但是,情況似乎並非如此。 Spinner適配器沒有收到事件。任何其他想法? – user1956604

+0

我誤解了。所以'onOptionsItemSelected' /'onItemSelected'都不被調用?微調控制器是否更改爲新選定的項目?如果您發佈了「MySpinnerAdapter」代碼,它可能也會有所幫助。 – dokkaebi

+0

我已經上傳了MySpinnerAdapter代碼。 – user1956604

相關問題