Android ListView 무한 순환 스크롤 실현
프로젝트 는 목록 데 이 터 를 순환 적 으로 보 여 줘 야 하기 때문에 이 무한 순환 스크롤 의 LIstView 를 실현 하 였 습 니 다.먼저 원리,원 리 를 말씀 드 리 겠 습 니 다.사실은 간단 합 니 다.먼저 보 여 드릴 데 이 터 를 세 번 순환 적 으로 보 여 드 리 겠 습 니 다.
ListView 의 스크롤 이 벤트 를 감청 합 니 다.ListView 가 두 번 째 두 번 째 두 번 째 로 굴 러 갈 때 ListView 는 자동 으로 두 번 째 두 번 째 두 번 째 로 넘 어 갑 니 다.마찬가지 로 ListView 가 꼴찌 첫 번 째 로 굴 러 갈 때 ListView 는 자동 으로 두 번 째 꼴찌 첫 번 째 로 넘 어 갑 니 다.그 다음 에 끊임없이 위로 또는 아래로 미 끄 러 질 수 있 습 니 다.영원히 끝 이 나 지 않 습 니 다.쓸데없는 말 하지 마 세 요.위로
코드:
ListView 를 세 번 반복 해서 보 여 줍 니 다.
우선 나머지 를 취 하 는 방법 을 이용 하여 List 안의 데 이 터 를 순환 적 으로 보 여 줍 니 다.
public class ListAdapter extends BaseAdapter {
private List<String> list;
private LayoutInflater mInflater;
public ListAdapter(Context context, List<String> list){
this.list = list;
this.mInflater = LayoutInflater.from(context);
}
/**
*
*/
@Override
public int getCount() {
if(list != null){
return list.size() * 3;
}
return 0;
}
@Override
public Object getItem(int arg0) {
return list.get(arg0 % list.size());
}
@Override
public long getItemId(int arg0) {
return arg0 % list.size();
}
@Override
public View getView(int postition, View convertView, ViewGroup arg2) {
ViewHoler viewHolder = null;
if(convertView == null){
viewHolder = new ViewHoler();
convertView = mInflater.inflate(R.layout.adapter_list_layout, null);
viewHolder.tvText = (TextView) convertView.findViewById(R.id.adapter_list_layout_tv);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHoler) convertView.getTag();
}
viewHolder.tvText.setText(list.get(postition % list.size()));//
return convertView;
}
static class ViewHoler{
TextView tvText;
}
}
그리고 ListView 의 스크롤 이 벤트 를 감청 합 니 다.
public class MainActivity extends Activity implements OnScrollListener {
private ListView listView;
private List<String> list;
private ListAdapter adapter;
// private LinearLayout linear;
//
// private int stopPosition;
// private int firstViewHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView1);
list = getList();
adapter = new ListAdapter(this, list);
listView.setAdapter(adapter);
listView.setOnScrollListener(this);
listView.setSelection(list.size());
}
/**
*
* @return
*/
public List<String> getList(){
List<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
list.add(String.valueOf(i));
}
return list;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
/**
* , , list.size()+2 , , ,setSelection ,
* listView , setSelection ,
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
/** */
if (firstVisibleItem <= 2) {
listView.setSelection(list.size() + 2);
} else if (firstVisibleItem + visibleItemCount > adapter.getCount() - 2) {//
listView.setSelection(firstVisibleItem - list.size());
}
}
}
이렇게 간단 합 니 다.헤헤,표 현 력 이 부족 합 니 다.알 아 보 셨 는 지 모 르 겠 습 니 다.못 알 아 보 셨 다 면 뒤에 소스 코드 를 붙 여 주세요안 드 로 이 드 무한 순환 스크롤이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.