안녕하세요.
이번에 작업 중간에 구현해야 하는 부분이 필요한데 도저히 어떻게 해야 할지 모르겠네요.
리스트뷰 안의 아이템들을 스크롤 하는 이벤트를 코드로 줄 수 있나요?
예를 들면 1번 리스트뷰의 scroll로 인해 변하는 y값을 2번 리스트뷰에 넘겨서 scroll되게 하는,
지금은 dispatchTouchEvent로 한쪽으로는 해결했는데 양쪽 다 적용할 경우 touch event가 재귀적으로 일어나서 stackoverflow가 납니다.
scrollBy나 scrollTo를 사용하면 listView 자체를 scroll 시키기 때문에 안 되구요. listView 안의 item들을 스크롤 할 수 있어야 할 것
같은데 그 방법을 모르겠네요 ㅠㅠ
아래는 해당 소스 입니다. (간단한 예제성이라 xml은 없어도 될 듯하여 첨부하지 않았습니다.)
package com.ray.test;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
public class Test_List_ScrollViewActivity extends Activity {
boolean rightScrollFlag = false;
boolean leftScrollFlag = false;
int rightScrollY = 0;
int leftScrollY = 0;
ListView leftList;
ListView rightList;
Test_List_Adapter leftAdapter;
Test_List_Adapter rightAdapter;
Test_List_Items rightItems;
ArrayList<Test_List_Items> itemList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
itemList = new ArrayList<Test_List_Items>();
String[] temp = new String[15];
for(int i=0; i<15; i++)
{
temp[i] = Integer.toString(i+1);
}
for(int i=0; i<15; i++)
{
rightItems = new Test_List_Items(temp);
itemList.add(rightItems);
}
leftList = (ListView)findViewById(R.id.left_list);
leftAdapter = new Test_List_Adapter(this, R.layout.left_list_items, itemList);
leftList.setAdapter(leftAdapter);
rightList = (ListView)findViewById(R.id.right_list);
rightAdapter = new Test_List_Adapter(this, R.layout.right_list_items, itemList);
rightList.setAdapter(rightAdapter);
leftList.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
rightList.dispatchTouchEvent(event); // stackOverFlow
return false;
}
});
rightList.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
leftList.dispatchTouchEvent(event); // stackOverFlow
return false;
}
});
}
}