2011-11-06 2 views
1

SimpleCursorAdapter을 사용하여 Cursor의 데이터로 채우는 Spinner 요소가 있습니다. 또한 Spinner의 맞춤 행 레이아웃에 setViewBinder을 사용하고 있습니다. 모든 것은 정상적으로 작동하며 Spinner은 데이터를 가져오고 Spinner 항목은 사용자 정의 레이아웃을 사용합니다.SimpleCursorAdapter 및 ViewBinder를 사용하여 Spinner 항목 클릭 수신기의 메서드

Spinner 드롭 다운보기 에서 항목을 클릭해도 아무런 변화가 없습니다.. 선택한 항목을 선택으로 설정하지 않고 드롭 다운보기를 닫지 않습니다. 나는 목록에서 선택한 항목이 Spinner 로직으로 전달되어 있어야하고 그렇게 실행되어야하므로 무엇을해야하는지 모른다. 나는 Spinner에 데이터를 추가하는 방법은 다음과

static final ViewBinder VIEW_BINDER = new ViewBinder(){ 
    public boolean setViewValue(View view, Cursor cursor, int columnIndex){ 

     if (view.getId() == R.id.text){ 

      String local = view.getResources().getString(cursor.getInt(columnIndex)); 
      ((TextView) view).setText(local); 

      return true; 
     } 
     if (view.getId() == R.id.icon){ 

      int icon = cursor.getInt(columnIndex); 
      ((ImageView) view).setImageResource(icon); 

      return true; 
     } 

     return false; 
    } 
}; 

과 :

private Spinner spinner; 
private DBHandler dbhandler; 
private SimpleCursorAdapter adapter; 
private final String[] from = new String[]{dbhandler.LIB_LOCAL, dbhandler.LIB_ICON}; 
private final int[] to = { R.id.text, R.id.icon }; 
@Override 
protected void onResume(){ 
    super.onResume(); 

    Cursor cursor = dbhandler.getLibEntries(); 


    adapter = new SimpleCursorAdapter(this, R.layout.spinner_row, cursor, from, to); 
    adapter.setViewBinder(VIEW_BINDER); 
    spinner.setAdapter(adapter); 
} 

제안 OnItemSelectedListener 등을 첨가 여기에 내가 사용하고 레이아웃입니다 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/linearLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:baselineAligned="false" 
    android:clickable="true" 
    android:orientation="horizontal"> 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:src="@drawable/ic_launcher" /> 


    <TextView 
     android:id="@+id/text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="6dp" 
     android:layout_weight="1" 
     android:textColor="#424242" 
     android:gravity="center_vertical" 
     android:text="Textfield" /> 

</LinearLayout> 
</LinearLayout> 

는 여기에 ViewBinder있어 이 게시물의 아래에 구현했지만, 문제를 해결하지 않습니다. 또한 나는 setOnItemSelectedListener은 제가 나중에 필요한 데이터 필드를 얻을 도움이 될 방법을 잘 모르겠어요 :

spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, 
       int position, long id) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 
      // TODO Auto-generated method stub 

     } 

     }); 

the problem

답변

0

우리가 갈 :

의이 켜지지이 DropDownView가 DropDownView과 SimpleCursorAdapter 생성자에 정의 된 레이아웃의 모양을 정의 adapter.setDropDownViewResource(R.layout.spinner_row); 을 설정할 수는 (폐쇄) 회 전자 개체 자체의 항목의 레이아웃 (하지를 정의 드롭 다운보기!).

그래서 SimpleCursorAdapter에 정의 된 것과 같은 DropDownView와 다른 레이아웃을 사용하면 좋겠지 만 푸시 된 값은 내가 사용하는 차이점을 제외하고 오른쪽 해당 필드로 설정할 수 있습니다. android:layout_height="?android:attr/listPreferredItemHeight" dropdownview 레이아웃의 textview 및 android : layout_height = "wrap_content"스피너 레이아웃의 텍스트 뷰!

0

것은 당신이해야 할 것은 OnItemSelectedListener을 구현합니다. 리스너에서 항목을 선택하면 해당 항목을 일종의 변수에 저장하면 회 전자가 닫힌 후에 액세스 할 수 있습니다. 여기

+0

글쎄, 사용자 정의 스피너가 아니라, 해당 항목에 대한 사용자 정의보기를 사용하고 있습니다. 표준 스피너를 사용하는 경우 리스너가 설정되었는지 여부에 관계없이 선택 사항이 구현됩니다. 어떤 특별한 활동을 수행하고 싶지는 않지만 항목을 선택할 수 있고 드롭 다운이 닫히고 선택된 항목이 getSelectedItem()을 호출 할 때 반환됩니다. 그걸 위해서 내가 직접 청취자를 사용하는 것이 필요한가? + 그렇다면 드롭 다운이 닫히고 아이템이 선택되도록 내가 무엇을 호출해야합니까? – masi

+0

죄송합니다. 질문에 대한 오해. 내 대답을 편집했습니다. –

+0

글쎄, 나는 OnItemSelectedListener를 설정했다. 하지만 그게 문제가 아니야. 문제는 드롭 다운 목록에서 항목을 선택하는 것입니다. 내가 할 수있는 유일한 일은 레이아웃에 onClick을 추가하는 것입니다. 그러나 어떻게하면 그 이벤트가 회 전자에 어떻게 도달 할 수 있는지 전혀 알 수 없습니다. 나는 좀더 명확한 코드와 이미지를 편집했다. – masi