2012-08-24 5 views
14

나는 데이터베이스에서 채 웁니다 회가 :spinner 항목의 onClickListener를 설정 하시겠습니까?

catSpinner = (Spinner) findViewById(R.id.spinner1); 
cursor = dataAdapter.getAllCategory(); 
startManagingCursor(cursor); 
String[] from = new String[] { DataAdapter.CATEGORY_COL_NAME }; 
int[] to = new int[] { android.R.id.text1 }; 
SimpleCursorAdapter catAdapter = new SimpleCursorAdapter(this, 
      android.R.layout.simple_spinner_dropdown_item, cursor, from,to, 0); 
catAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
catAdapter.notifyDataSetChanged(); 
catSpinner.setAdapter(catAdapter); 

을 그리고 나는 마지막 항목 (Add new category...)를 선택하면 AlertDialog를 호출합니다.
새 카테고리를 추가 한 후 "item (Add new category...)"이 마지막으로 다시 나타납니다.
어떻게하면됩니까?

답변

49

회 전자는 OnItemClickListener이라고해야합니다. Spinner는 항목 클릭 이벤트를 지원하지 않습니다. 이 메소드를 호출하면 예외가 발생합니다. this을 확인하십시오. 대신 OnItemSelectedListener을 적용 할 수 있습니다.

편집 :

spinner.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String selectedItem = parent.getItemAtPosition(position).toString(); if(selectedItem.equals("Add new category")) { // do your stuff } } // to close the onItemSelected public void onNothingSelected(AdapterView<?> parent) { } }); 

지금까지 걱정입니다, 당신이 더 나은하는 모든 항목을 추가 한 후 사용자 정의 어댑터 가야한다고 생각리스트의 말미에 "새로운 카테고리를 추가"를 추가하는 등, 당신은 그 상수 (Add new category)를 배열의 끝 부분에 추가하여 항상 마지막에 올 수 있습니다.

+0

. 그러나'OnItemSelectedListener'에서 어떻게 처리 할 수 ​​있습니까? –

+1

u 항목을 선택하면 u 항목을 선택할 수 있습니다. 선택한 항목을 미리 정의 된 항목과 일정하게 비교하십시오. 선택한 항목이 미리 정의 된 항목 인 경우 작업을 수행하십시오 – Braj

+0

작동하지 않습니다. 이 'parent.getItemAtPosition (position) .toString();'이 위치를 반환하고이를 문자열로 변환하기 때문에 나는 생각한다. –

5

Spinner의 OnItemClickListener에 연결합니다. 그런 다음 선택한 항목이 "새 카테고리 추가"인지 확인하십시오.

예인 경우 대화 상자를 표시하여 새 항목을 추가하십시오.

새 항목을 추가하는 동안

,

  1. 는 "새로운 카테고리를 추가"마지막 항목을 제거합니다.
  2. 입력 한 새 범주를 추가하십시오.
  3. 그런 다음 "새 카테고리 추가"항목을 다시 추가하십시오.

이렇게하면 "새 카테고리 추가"항목이 마지막으로 추가됩니다.

코드 샘플 :

레이아웃 main.xml에 :

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

<Spinner 
    android:id="@+id/cmbNames" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

</LinearLayout> 

레이아웃 spinner_item.xml

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

<TextView 
    android:id="@+id/tvName" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

</LinearLayout> 

활동 클래스 :이 알고

public class MainActivity extends Activity { 

private static final String NAME = "name"; 
private static final String ADD_NEW_ITEM = "Add New Item"; 

private SimpleAdapter adapter; 
private Spinner cmbNames; 
private List<HashMap<String, String>> lstNames; 
private int counter; 

private OnItemSelectedListener itemSelectedListener = new OnItemSelectedListener() { 

    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
      long arg3) { 
     HashMap<String, String> map = lstNames.get(arg2); 
     String name = map.get(NAME); 
     if (name.equalsIgnoreCase(ADD_NEW_ITEM)) { 
      lstNames.remove(map); 
      counter++; 
      addNewName(String.valueOf(counter)); 
      addNewName(ADD_NEW_ITEM); 
      adapter.notifyDataSetChanged(); 
     } 
    } 

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

    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    populateList(); 

    cmbNames = (Spinner) findViewById(R.id.cmbNames); 
    adapter = new SimpleAdapter(this, lstNames, R.layout.spinner_item, 
      new String[] { NAME }, new int[] { R.id.tvName }); 
    cmbNames.setAdapter(adapter); 
    cmbNames.setOnItemSelectedListener(itemSelectedListener); 
} 

private void populateList() { 
    lstNames = new ArrayList<HashMap<String, String>>(); 

    addNewName("abc"); 
    addNewName("pqr"); 
    addNewName("xyz"); 
    addNewName(ADD_NEW_ITEM); 
} 

private void addNewName(String name) { 
    HashMap<String, String> map = new HashMap<String, String>(); 
    map.put(NAME, name); 
    lstNames.add(map); 
} 

} 
+1

샘플 코드로 게시물을 업데이트했습니다. 확인해주십시오. –

+0

onitemclicklistener는 회 전자에 연결할 수 없습니다. – SoroushA

관련 문제