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
}
});
글쎄, 사용자 정의 스피너가 아니라, 해당 항목에 대한 사용자 정의보기를 사용하고 있습니다. 표준 스피너를 사용하는 경우 리스너가 설정되었는지 여부에 관계없이 선택 사항이 구현됩니다. 어떤 특별한 활동을 수행하고 싶지는 않지만 항목을 선택할 수 있고 드롭 다운이 닫히고 선택된 항목이 getSelectedItem()을 호출 할 때 반환됩니다. 그걸 위해서 내가 직접 청취자를 사용하는 것이 필요한가? + 그렇다면 드롭 다운이 닫히고 아이템이 선택되도록 내가 무엇을 호출해야합니까? – masi
죄송합니다. 질문에 대한 오해. 내 대답을 편집했습니다. –
글쎄, 나는 OnItemSelectedListener를 설정했다. 하지만 그게 문제가 아니야. 문제는 드롭 다운 목록에서 항목을 선택하는 것입니다. 내가 할 수있는 유일한 일은 레이아웃에 onClick을 추가하는 것입니다. 그러나 어떻게하면 그 이벤트가 회 전자에 어떻게 도달 할 수 있는지 전혀 알 수 없습니다. 나는 좀더 명확한 코드와 이미지를 편집했다. – masi