2013-11-26 1 views
4

(Android API 버전 9) 사용자 정의 어댑터가있는 회 전자를 작성하고 getView()를 재정 의하여 텍스트 뷰가있는 XML 파일로 확장합니다. 하지만 이제는 사용자가 항목을 선택하면 내 회 전자가 드롭 다운 목록을 닫지 않습니다. 항목을 선택하면 회 전자 드롭 다운을 닫을 수 있습니까?선택 후 드롭 다운 메뉴를 숨기지 않는 맞춤 회 전자

코드

//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() 메소드에서, 텍스트 뷰의 TX의 OnClickListener를의 온 클릭 (뷰 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"을 추가하고 Spinner에 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> 

자세한 설명이 필요하면 의견을 말하고 대답을 자세히 설명해 드리겠습니다.

관련 문제