2014-03-13 2 views
3

나는 접근성 응용 프로그램을 제작 중이며 사용자가 스크롤 할 때 AlphabetIndexer의 현재 문자를 크게 읽으 려합니다.현재 편지 가져 오기 onScroll?

어떻게하면 일부 코드를 실행할 수 있습니까? 그리고 CursorAdapter 안에 현재의 편지를 어떻게 얻습니까?

감사


이 내가 노력하고있어입니다 (난 단지 관련 비트를 떠나 시도) :

@Override 
public int getPositionForSection(int section) 
{ 
    int result = super.getPositionForSection(section); 
    Log.i("TAG", "getPositionForSection " + result); 
    return result; 
} 
:
private class ContactsAdapter extends CursorAdapter implements SectionIndexer { 
    private LayoutInflater mInflater; 
    private AlphabetIndexer mAlphabetIndexer; 

    public ContactsAdapter(Context context) { 
     super(context, null, 0); 
     mInflater = LayoutInflater.from(context); 
     final String alphabet = context.getString(R.string.alphabet); 
     mAlphabetIndexer = new AlphabetIndexer(null, ContactsQuery.SORT_KEY, alphabet); 
    } 

    // ... 

    @Override 
    public Object[] getSections() { 
     return mAlphabetIndexer.getSections(); 
    } 

    @Override 
    public int getPositionForSection(int i) { 
     if (getCursor() == null) { 
      return 0; 
     } 
     Log.i("TAG", "getPositionForSection " + mAlphabetIndexer.getPositionForSection(i)); 
     return mAlphabetIndexer.getPositionForSection(i); 
    } 

    @Override 
    public int getSectionForPosition(int i) { 
     if (getCursor() == null) { 
      return 0; 
     } 
     return mAlphabetIndexer.getSectionForPosition(i); 
    } 
} 

답변

0

SectionIndexer.getSectionForPosition은 해당 섹션의 색인을 SectionIndexer.getSections 내에 반환합니다. 내가 작업 프로젝트 on github with alphabetIndexer과 섹션 헤더를 게시 한

@Override 
    public int getSectionForPosition(int i) { 
     if (getCursor() == null) { 
      return 0; 
     } 
     // Prints the letter for the current section 
     System.out.println(getSections()[mAlphabetIndexer.getSectionForPosition(i)]); 
     return mAlphabetIndexer.getSectionForPosition(i); 
    } 
+0

방금 ​​시도했지만 정상적으로 작동하지만 'ArrayIndexOutOfBoundsException' 메시지로 무작위로 충돌합니다. – lisovaccaro

+0

'[i] '대신'[mAlphabetIndexer.getSectionForPosition (i)] '이 (가) 문제를 발견했습니다. – lisovaccaro

+0

죄송합니다. . 내 부분에 대해 약간의 감독. 편집 해 주셔서 감사합니다. – adneal

0

은 사용자 정의는 다음과 오버라이드 (override) SectionIndexer 되세요

사용자가 목록을 빠르게 스크롤 할 때 호출되며, 결과를 사용하여 알파벳 배열에서 실제 문자를 가져올 수 있습니다.

+0

어떻게 편지를받을 수 있습니까? 어쨌든 당신이 제안한대로'getPositionForSection (i)'로깅을 시도했으나 아래로 스크롤하면 매우 정확하지 않은 것처럼 보입니다. "02102102121402140 , 50,70 " – lisovaccaro

+0

당신이 찾고있는 것보다 더 많은 정보를 담고있는'getSectionForPosition'을 로깅 해보십시오. – Josh

+0

나는 그것을 시험해 보았다. 그러나 나는 어떤 운도 가지지 않고 있었다! – lisovaccaro

0

: 그래서 섹션의 현재 편지를 검색하기 위해, 당신이해야 할 모든 호출입니다. 심지어 그것은 귀하의 휴대 전화에서 연락처를 걸립니다.

listner를 사용하여 스크롤을 기반으로 현재 알파 퍼즐을 찾을 수 있습니다. 이이 activity.

개인 OnScrollListener mOnScrollListener = 새로운 OnScrollListener 봐() {

private int lastFirstVisibleItem = -1; 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, 
      int totalItemCount) { 
     // firstVisibleItem corresponding to the index of AlphabetIndexer(eg, B-->Alphabet index is 2) 
     int sectionIndex = mIndexer.getSectionForPosition(firstVisibleItem); 
     //next section Index corresponding to the positon in the listview 
     int nextSectionPosition = mIndexer.getPositionForSection(sectionIndex + 1); 

     if(firstVisibleItem != lastFirstVisibleItem) { 
      if(String.valueOf(alphabet.charAt(sectionIndex)).equalsIgnoreCase("a")){ 
         //Play the sound for A. 
      } 

      lastFirstVisibleItem = firstVisibleItem; 
     } 

     } 

    }; 

참고 :

  • 위의 코드는 오타가있을 수 있습니다.
  • 연락처가있는 장치 또는 에뮬레이터에서 프로젝트를 자유롭게 실행하고 그에 따라 변경하십시오.