2010-11-26 7 views
0

나는 스피너, 커서 및 어댑터와 함께 일하고 있습니다.안드로이드 회 전자 "onclicklistener"질문

사용자가 회 전자에서 항목을 선택하면 현재 선택한 항목을 가져온 다음 다른 작업 (이 모든 추가 코드는 문제가 없습니다. 단지 1 개의 문제 만 수행하도록 설정합니다. 나는 가지고있다.). 그러나 setOnItemSelectedListener 콜백을 선언하고 나면 커서가 이미 채워져 있기 때문에 앱이 시작 되 자마자 이벤트가 시작된다.

이벤트가 발생하지 않도록 항목을 선택하지 않고 커서를 정의하는 방법이 필요합니다 (항목이 선택되지 않기 때문에). 아니면 이것을 달성하는 또 다른 좋은 방법이 있습니까?

기본적으로 커서가로드되기 때문에 앱이로드되면 setOnItemSelectedListener 함수가 실행됩니다 (나는 생각합니다). 또한 이벤트가 너무 빨리 실행된다는 사실을 무시하고, 스피너에서 -same- 항목을 선택하면 항목이 변경되지 않아 이벤트가 실행되지 않습니다. setonitemslectedlistener 대신 다른 콜백을 사용해야합니까? 지금까지 제가 가지고있는 코드는 다음과 같습니다.

  c = db.getallrecents(); 
    startManagingCursor(c); 

    busnumspinner = (Spinner) findViewById(R.id.Spinner01); 

     SimpleCursorAdapter spinneradapter = new SimpleCursorAdapter(this, 
       R.layout.lvlayout, c, spincol, spinto); 

    busnumspinner.setAdapter(spinneradapter); 


    busnumspinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
      String spinnerString = null; 
      Cursor cc = (Cursor)(busnumspinner.getSelectedItem()); 
      if (cc != null) { 
       spinnerString = cc.getString(
        cc.getColumnIndex("busnum")); 
       text = spinnerString; 
      } 

      showDialog(DATE_DIALOG_ID); 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parentView) { 
      // your code here 
     } 
    }); 
+0

, 나는 그것이 그러나이 라운드 콜백이 정의되면 발사 이벤트, 즉 문제가 내 문제 중 하나 얻는다 – Javi

답변

3

이것은 이미 question에서 논의되었다. 거기에는 눈을 멀게하는 것과 비슷한 대답이 있지만 거기를보십시오.

편집 :

당신이 그것을 필요로 할 때 onItemSelectedListener가 다음 아마도 droplist의 eachtext 항목에 OnClickListener를 필요하고 거기에 스피너의 선택된 항목의 현재 위치를 얻을 발사되지 않습니다. 문제는 그것이 here 회 전자가이 이벤트를 지원하지 않는다고 말하지만, 아마 stackoverflow question에서 설명한 것과 비슷한 것을함으로써 얻을 수 있습니다. 나는 그것을 시도하지 않았으므로 그것이 효과가 있을지 확신하지 못한다. 제로 위치가 있다면

+0

실제로 javi는 부울을 사용하여 처음으로 이벤트 실행을 중지합니다. 하지만 두 번째로 스피너에서 같은 항목을 선택하면 발사하지 않는 이벤트의 두 번째 문제를 어떻게 해결할 수 있습니까? 어떤 충고도 환영받습니다. – brux

+0

감사합니다. javi에게 도움이됩니다. 솔직히 말해서 지금 당장이 문제를 해결하기 위해 UI를 재 작업 할 것입니다. – brux

+0

@brux 좋은 생각 – Javi

2

는이 시스템이 아니 꽤 솔루션이 선택됩니다 처음 무시하는 부울 플래그를 사용하여,하지만 난 시간이 몇 고생하고, 더 나은 솔루션을 발견 적이 없다.

+1

도움이되기를 바랍니다 회 전자의 동일한 항목을 선택하면 이벤트를 실행할 수없는 문제가 여전히 남아 있습니다./ – brux

+0

개인적으로 그 문제에 대한 해결책을 찾지 못했습니다. 미안합니다. 방금 UI 뒤에 로직을 재 작업했습니다. 단추를 추가 할 수 있습니까? 누군가가 이것에 대한 해결책을 가지고 있다면 그것은 나에게 큰 도움이 될 것입니다. – blindstuff

+0

감사합니다. 블라인드 스푸프, UI 재 작업을 하겠지만 javi가 제공하는 솔루션은 작동합니다. 어쨌든 당신에게 엄지 손가락을 줘요! 덕분에 – brux

1

당신은 0보다 큰 다음

는 예를 볼 수있는 방법에 입력 한 루프에 입력 해달라고, selectvalues ​​같은 기본 값으로 회 전자의 첫 번째 항목을 추가하고 onitemselected 청취자의 위치를 ​​확인할 수 있습니다

의 Bindview를 오버라이드 (override),

이 SimpleCursorAdapter를 확장()와 행보기를 OnClickListener를 설정합니다

busnumspinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int 
    position, long id) { 
    if(position!=0) 
    { 
     String spinnerString = null; 
     Cursor cc = (Cursor)(busnumspinner.getSelectedItem()); 
     if (cc != null) { 
      spinnerString = cc.getString(
       cc.getColumnIndex("busnum")); 
      text = spinnerString; 
     } 
     } 

    So this is not run the default value 
0

이보십시오. 당신은 초기 호출을하지 않으며, 각 선택 클릭 (INC 다시보세요.)

당신이 예제 코드가 필요 알려줘을 얻을 :

는 두 문제를 해결합니다.

편집 : 코드 예제 : 내 대답을 편집 한

protected class NoteAdapter extends SimpleCursorAdapter { 

    // Constructor 
    public NoteAdapter(Context context, Cursor c) { 
     super(context, R.layout.etb_items_strip_list_item, c, fromNote, toNote); 
    } 


    // This is where the actual binding of a cursor to view happens 
    @Override 
    public void bindView(View row, Context context, Cursor cursor) { 
     super.bindView(row, context, cursor); 

     // Save id 
     Long id = cursor.getLong(cursor.getColumnIndex("_id")); 
     row.setTag(id); 

     // Set callback 
     row.setOnClickListener(row_OnClick); 
    } 

    // Callback: Item Click 
    OnClickListener row_OnClick = new OnClickListener(){ 
     public void onClick(View v) { 
      Long id = (Long) v.getTag(); 
     } 
    }; 

} 
+0

OferR는 약간의 코드를 제게 제공 할 수 있습니다 ... –