2012-12-07 45 views
2

我正在嘗試實現NAVIGATION_MODE_LIST,例如gmail Android應用程序。 我的主要問題是從微調列表中隱藏當前選定的項目。 因此,例如如gmail android app所示,如果您選擇發送,則只有微調器中顯示其他元素。Gmail Android應用程序,如ActionView/Spinner(NAVIGATION_MODE_LIST)

我的理解說,這是一個自定義的ActionView,而不是使用NAVIGATION_MODE_LIST和自定義適配器。

+0

找到在這個問題[鏈接](http://stackoverflow.com/questions/11410028/android-custom-adapter-with-custom-spinner-drop-down-xml-layout部分溶液-giving錯誤) –

回答

2

如果有人正在尋找解決這裏是這個問題,

這裏是它下面的代碼創建您的適配器並將它加入到書面與link

使用幫助示例代碼動作條列表導航

ActionBar actionBar = getSupportActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 

    itemArr = getResources().getStringArray(R.array.array_spinner_items); 
    items = toArrayList(itemArr, null); 

    navigationAdapter = new CustomAdapter(this, R.layout.navigation_item_layout, items); 
    actionBar.setListNavigationCallbacks(navigationAdapter, this); 
    actionBar.setDisplayShowTitleEnabled(false); 

擴展BaseAdapterArrayAdapterimplement SpinnerAdapter

在您的適配器覆蓋getDropdownView這是在下拉 負責各個項目視圖,並覆蓋getView負責出現在動作條

'公共類CustomAdapter視圖擴展ArrayAdapter實現SpinnerAdapter {

Context context; 
    int textViewResourceId; 
    ArrayList<String> arrayList; 

    public CustomAdapter(Context context, int textViewResourceId, ArrayList<String> arrayList) { 
     super(context, textViewResourceId, arrayList); 

     this.context = context; 
     this.textViewResourceId = textViewResourceId; 
     this.arrayList = arrayList; 

    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent){ 
     if (convertView == null) 
     { 
     LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     //convertView = vi.inflate(android.R.layout.simple_spinner_dropdown_item, null); 
     convertView = vi.inflate(R.layout.navigation_item_layout, null); 
     } 

     TextView textView = (TextView) convertView.findViewById(R.id.navigation_item); 
     textView.setText(arrayList.get(position).toString());//after changing from ArrayList<String> to ArrayList<Object> 

     if (position == curitem) { 
      textView.setHeight(0); 
     } 
     else{ 
     textView.setHeight(60); 
     } 

     return convertView; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if(convertView == null) { 
      convertView = getLayoutInflater().inflate(R.layout.navigation_item_layout, null); 
     } 
     TextView textview = (TextView) convertView.findViewById(R.id.navigation_item); 
     textview.setText(itemArr[position].toUpperCase()); 
     textview.setTextColor(Color.RED); 
     return convertView; 
    } 

}` 

這是spinner項目的佈局文件navigation_tem_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/navigation_item" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:padding="10dp" /> 
1

您可能無法在導航li中提供當前條目st,並將其顯示在getView()方法的自定義SpinnerAdapter中。

我剛剛寫了一篇完整的源代碼文章,但我的示例使用靜態類型數組 - 您可以將其更改爲使用自定義NavigationListItem類(或任何您想調用它)併爲每個活動構建一個動態列表,這不包括目前的一個。您需要小心,因爲微調將在開始時嘗試選擇第一個條目,但您可以在getView()中顯示您想要的內容,而不是使用position提供的條目。

dandar3.blogspot.com/2013/03/actionbarsherlock-custom-list-navigation.html

相關問題