2013-11-26 78 views
4

(Android API版本9)我創建了一個自定義適配器的微調和getView()來誇大它與我的XML文件,它有一個文本視圖。但是現在,我的微調不在用戶選擇一個項目後關閉下拉列表。無論如何,在選擇一個項目時關閉Spinner下拉菜單?自定義微調不選擇後隱藏下拉菜單

代碼

//Code in onCreate function 
    Spinner list = (Spinner) findViewById(R.id.spn_purchaseList); 
    listAdapter = new ItemListAdapter(this, new MyItemList()); 
    list.setAdapter(listAdapter); 
    listAdapter.item_list.addItem(new MyItem("Test", "Test Item")); 
    listAdapter.notifyDataSetChanged(); 
//onCreate end 
//the class below is inside "MainActivity extends Activity" 
class ItemListAdapter extends BaseAdapter 
{ 
    Context context; 
    MyItemList item_list; 
    MyItem selectedItem; 


    ItemListAdapter(Context con,MyItemList k) 
    { 
     super(); 
     this.context=con; 
     this.item_list=k; 
     selectedItem=null; 
    } 

    @Override 
    public int getCount() { 

     return item_list.getCount(); 
    } 

    @Override 
    public MyItem getItem(int arg0) { 

     return this.item_list.getList().get(arg0); 
    } 

    @Override 
    public long getItemId(int arg0) { 

     return this.item_list.getPosition(this.item_list.getList().get(arg0)); 
    } 

    @Override 
    public View getView(int position, View arg1, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View spinner_item = inflater.inflate(R.layout.spinner_layout, parent, false); 

     TextView tx = (TextView)spinner_item.findViewById(R.id.txt_spinner); 
     tx.setId((int) item_list.getPosition(item_list.getList().get(position))); 


     tx.setText(this.item_list.getList().get(position).name.toString()); 
     tx.setBackgroundResource(R.drawable.spinner_item); 

     tx.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       selectedItem = item_list.getItem(v.getId()); 
       list.setSelection(v.getId()); 



      } 
     }); 

     return spinner_item; 
    } 

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


     return getView(position,convertView,parent); 

    } 

} 
+3

告訴我們你試過的代碼 –

+1

我想出了一個答案,但我不確定它是否是一個好答案。我仍在努力尋找更好的答案。這是我的解決方案。在getView()方法,在TextView的TX的onClickListener所述的onClick(視圖v)函數中,添加以下代碼 \t \t \t \t \t((查看)v.getParent()。的getParent()。的getParent 。().getParent()的getParent()的getParent())setVisibility(View.GONE); –

回答

1

調用setVisibility(View.GONE)工程,以隱藏下拉,但它似乎引起了微調狀態,即問題,你將無法重新打開下拉菜單已經關閉後。

首選的方法是獲取Spinner的句柄並從onClick()偵聽器調用onDetachedFromWindow()。

@Override 
public void onClick(View v) { 
    // code here to get selected item and do something with it 

    // hide the spinner dropdown 
    Spinner spinner = (Spinner) findViewById(R.id.mySpinner); 
    if (spinner != null) { 
     try { 
      Method method = Spinner.class.getDeclaredMethod("onDetachedFromWindow"); 
      method.setAccessible(true); 
      method.invoke(spinner); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

謝謝!爲了讓它靠近,我拼盡全力浪費了一天的時間 –

0

太晚了,但對於我的情況我有一個自定義佈局的微調項目。 clickable="true"或添加onClickListeners,onItemSelectedListeners不起作用,因爲我將它們添加到根佈局。

當我改變我的代碼如下,我添加android:background="?attr/selectableItemBackground"父級佈局的子,並設置OnItemSelectedListener()微調,它的工作。點擊項目時,微調對話框或下拉框隱藏。

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/selectableItemBackground"> 

     <!-- your custom spinner item view --> 

    </LinearLayout> 

</LinearLayout> 

如果您需要更多的解釋,只是評論,我會詳細說明我的答案。