GestureDetector를 이용하여 스크롤될때의 Listener를 구현하려고 합니다

구현하고자 하는것은 리스트 오른편에 index를 구현하는 것인데요

touch하면 정상적으로 잘 동작합니다. 다만 스크롤할때를 위하여 SimpleOnGestureListener를 구현해두었는데요

이 부분으로 진입하지를 않습니다.

즉, OnScroll안에 Log를 찍어봐도 나타나지 않는걸로 봐서 이부분이 아예 실행이 되지 않는것 같습니다.

아직 안드로이드의 실행순서에 익숙하지 못합니다 그렇기 때문에 이 부분이 호출되지 않는 이유를 잘 모르겠습니다.

고수님들의 조언을 부탁드립니다 ㅠㅠ

 

 

 

 

public class Friends extends Activity{
 private static final String TAG = "ARtalk";
 public static final int NUMBER = 0;
 public static final int NAME = 1;
 HttpConnect m_httpConnect;
 public static final String RESULT = "com.arvision.artalk.main.Friends";
 private ListView lstFriendView;
 private ArrayList<FriendsList> alFriends;
 private ArrayList<FriendsList> connectedFriends;
 private FriendsAdapter friendsAdapter;
 private GestureDetector mGestureDetector;
 
    // x and y coordinates within our side index
    private static float sideIndexX;
    private static float sideIndexY;    // height of side index
    private int sideIndexHeight;    // number of items in the side index
    private int indexListSize;
    
    private ArrayList<Object[]> indexList = null;
    private SearchIndex searchIndex = new SearchIndex();
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.friends);
  //mGestureDetector = new GestureDetector(this);
  
  IntentFilter filter = new IntentFilter(RESULT);
  registerReceiver(mBR, filter);
  
  ArrayList<String> alPhoneNumber=phoneBook(NUMBER);
  ArrayList<String> alPhoneName=phoneBook(NAME);
  int nListSize=alPhoneNumber.size();
  alFriends = new ArrayList<FriendsList>();
  connectedFriends = new ArrayList<FriendsList>();
  lstFriendView = (ListView)findViewById(R.id.lstFriendView);
  StringBuffer pn = new StringBuffer();
  for (int i = 0; i < nListSize; i++) {
   pn.append(alPhoneNumber.get(i).toString()+",");
   alFriends.add(new FriendsList(alPhoneName.get(i).toString(), alPhoneNumber.get(i).toString(), R.drawable.ic_profile, "[오늘은 행복한 날입니다]"));
   Log.i("######## contact ########", alPhoneNumber.get(i).toString());
  }
  
  m_httpConnect=new HttpConnect(this,this.getString(
    R.string.server_url)+"/getFriendsList",
    Consts.GET_FRIENDLIST_SUBTAB1,
    pn.toString()
  );
  new Thread(m_httpConnect).start();
  
  mGestureDetector = new GestureDetector(this, new SideIndexGestureListener());
 }
 
 @Override
    public boolean onTouchEvent(MotionEvent event)
    {
  if (mGestureDetector != null) {
   return mGestureDetector.onTouchEvent(event);
  } else {
   return super.onTouchEvent(event);
  }  
    } 
 public void onSearchIndex() {
        LinearLayout sideIndex = (LinearLayout) findViewById(R.id.sideIndex);
        sideIndexHeight = sideIndex.getHeight();
        sideIndex.removeAllViews();
        
        // TextView for every visible item
        TextView tmpTV = null;
        Log.e(TAG, "connectedFriends.size() : " + connectedFriends.size());
        for(int i = 0; i < connectedFriends.size(); i++) {
         Log.e(TAG, connectedFriends.get(i).m_sName);
        }        // we'll create the index list
        String[] strArr = {"가", "나", "다", "라", "마", "바", "사", "아", "자", "차", "카", "타", "파", "하"};
        if(strArr.length > 0)
        indexList = searchIndex.createIndex(connectedFriends, strArr);        // number of items in the index List
        indexListSize = indexList.size();        // maximal number of item, which could be displayed
        int indexMaxSize = (int) Math.floor(sideIndex.getHeight() / 10);
        Log.e(TAG, "sideIndex.getHeight() : " + sideIndex.getHeight());
        Log.e(TAG, "indexMaxSize : " + indexMaxSize);
        Log.e(TAG, "indexListSize : " + indexListSize);        int tmpIndexListSize = indexListSize;        // handling that case when indexListSize > indexMaxSize
        while (tmpIndexListSize > indexMaxSize)
        {
            tmpIndexListSize = tmpIndexListSize / 2;
        }        // computing delta (only a part of items will be displayed to save a
        // place)
        double delta = indexListSize / tmpIndexListSize;
        Log.e(TAG, "delta : " + delta);        String tmpLetter = null;
        Object[] tmpIndexItem = null;        // show every m-th letter
        for (double i = 1; i <= indexListSize; i = i + delta)
        {
            tmpIndexItem = indexList.get((int) i - 1);
            tmpLetter = tmpIndexItem[0].toString();
            tmpTV = new TextView(this);
            tmpTV.setText(tmpLetter);
            tmpTV.setGravity(Gravity.CENTER);
            tmpTV.setTextSize(10);
            LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1);
            tmpTV.setLayoutParams(params);
            sideIndex.addView(tmpTV);
        }        // and set a touch listener for it
        sideIndex.setOnTouchListener(new OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {
                // now you know coordinates of touch
                sideIndexX = event.getX();
                sideIndexY = event.getY();//                Log.e(TAG, sideIndexX + "");
                // and can display a proper item it country list
                double pixelPerIndexItem = (double) sideIndexHeight / indexListSize;
                Log.e(TAG, "pixelPerIndexItem : " + pixelPerIndexItem);
                Log.e(TAG, "sideIndexY : " + sideIndexY);
             int itemPosition = (int) (sideIndexY / pixelPerIndexItem);
             Log.e(TAG, "itemPosition : " + itemPosition);
             Object[] indexItem = indexList.get(itemPosition);
             int indexMin = 0;
             try {
              indexMin = Integer.parseInt(indexItem[1].toString());
             } catch (NullPointerException e) {
              ;
             }
             lstFriendView.setSelection(indexMin);                                return false;
            }
        });
 }
 
 class SideIndexGestureListener extends GestureDetector.SimpleOnGestureListener
    {
     @Override
     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
     {
      Log.e(TAG, "sideIndexY : " + sideIndexY);
      Log.e(TAG, "distanceY : " + distanceY);
      // we know already coordinates of first touch
      // we know as well a scroll distance
//      LinearLayout sideIndex = (LinearLayout) findViewById(R.id.sideIndex);
      sideIndexX = sideIndexX - distanceX;
      sideIndexY = sideIndexY - distanceY;
      
      // when the user scrolls within our side index
      // we can show for every position in it a proper
      // item in the country list
      if (sideIndexX >= 0 && sideIndexY >= 0)
      {
       double pixelPerIndexItem = (double) sideIndexHeight / indexListSize;
                Log.e(TAG, "pixelPerIndexItem : " + pixelPerIndexItem);
                Log.e(TAG, "sideIndexY : " + sideIndexY);
             int itemPosition = (int) (sideIndexY / pixelPerIndexItem);
             Log.e(TAG, "itemPosition : " + itemPosition);
             Object[] indexItem = indexList.get(itemPosition);
             int indexMin = Integer.parseInt(indexItem[1].toString());
             lstFriendView.setSelection(indexMin);
      }
      return super.onScroll(e1, e2, distanceX, distanceY);
     }
    }
 
 // 브로드캐스트 리시버.
 BroadcastReceiver mBR = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
   if (intent.getAction().equals(RESULT)) {
    if (m_httpConnect.getResult().size()>0) {
     ArrayList<DaoGetFriendsList> friendsLists = ConvertArray(m_httpConnect.getResult());     
     // 전화번호를 비교하여 ListView에 뿌림
     for(int i = 0; i < alFriends.size(); i++) {
      for(int j = 0; j < friendsLists.size(); j++) {
       
        if (alFriends.get(i).m_sPhone.equals(friendsLists.get(j).m_sUserPhone))
         connectedFriends.add(new FriendsList(alFriends.get(i).m_sName, alFriends.get(i).m_sPhone, R.drawable.ic_profile, alFriends.get(i).m_sComment));
       //connectedFriends.add(new FriendsList(friendsLists.get(j).m_sUserPhone, null, 0));
      }
     }
     
     friendsAdapter = new FriendsAdapter(Friends.this, R.layout.friend_view, connectedFriends);
     lstFriendView = (ListView)findViewById(R.id.lstFriendView);
     lstFriendView.setAdapter(friendsAdapter);
     
     if(connectedFriends.size() > 0)
      onSearchIndex(); 
    }
    
   }
  }
 };