listView中嵌套viewpager隨着listview滾動

直接上代碼:
package com.example.demo;

import java.util.ArrayList;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {

private int[] imageIds;
private String[] titles;
private ArrayList<ImageView> images;
private ArrayList<View> dots;
private TextView title;
private ViewPagerAdapter adapter;
private ViewPager mViewPager;
private int oldPosition = 0;// 記錄上一次點的位置
private int currentItem; // 當前頁面
private ScheduledExecutorService scheduledExecutorService;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView) findViewById(R.id.lv);
// 圖片id
imageIds = new int[] { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e };
// 圖片標題
titles = new String[] { "鞏俐不低俗,我就不能低俗", "撲樹又回來啦!再唱經典老歌引萬人大合唱", "揭祕北京電影如何升級", "樂視網TV版大派送", "熱血屌絲的反殺" };
images = new ArrayList<ImageView>();

/*
* ListView.LayoutParams LP=new
* ListView.LayoutParams(LayoutParams.MATCH_PARENT,
* LayoutParams.MATCH_PARENT); fl.setLayoutParams(LP);
* lv.addHeaderView(rl);
*/
lv.setAdapter(new MyAdapter());

}

private class MyAdapter extends BaseAdapter {

@Override
public int getCount() {
return imageIds.length;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return imageIds[position];
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (position == 0) {
view = View.inflate(MainActivity.this, R.layout.activity_main, null);
for (int i = 0; i < imageIds.length; i++) {
ImageView imageView = new ImageView(MainActivity.this);
imageView.setBackgroundResource(imageIds[i]);
images.add(imageView);
}

// 顯示的點
dots = new ArrayList<View>();
dots.add(view.findViewById(R.id.dot_0));
dots.add(view.findViewById(R.id.dot_1));
dots.add(view.findViewById(R.id.dot_2));
dots.add(view.findViewById(R.id.dot_3));
dots.add(view.findViewById(R.id.dot_4));

title = (TextView) view.findViewById(R.id.title);
title.setText(titles[0]);
mViewPager = (ViewPager) view.findViewById(R.id.vp);
adapter = new ViewPagerAdapter();
mViewPager.setAdapter(adapter);
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

@Override
public void onPageSelected(int arg0) {
title.setText(titles[arg0]);
dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal);
dots.get(arg0).setBackgroundResource(R.drawable.dot_focused);
oldPosition = arg0;
currentItem = arg0;
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub

}

@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub

}
});
} else {

if (convertView != null && convertView instanceof LinearLayout) {
view = convertView;
} else {
view = View.inflate(MainActivity.this, R.layout.list_item, null);
}
TextView title = (TextView) view.findViewById(R.id.tv_title);
ImageView image = (ImageView) view.findViewById(R.id.iv_body);
title.setText(titles[position - 1]);
image.setBackgroundResource(imageIds[position - 1]);
}

return view;
}

}

private class ViewPagerAdapter extends PagerAdapter {


@Override
public int getCount() {
return images.size();
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(images.get(position));
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
//View view = container.getChildAt(position);
ImageView imageView = images.get(position);
if (imageView != null) {
ViewGroup parent = (ViewGroup) imageView.getParent();
if(parent!=null){
parent.removeView(imageView);
}
}
container.addView(images.get(position));
return images.get(position);

}

}

@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();

scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.scheduleWithFixedDelay(new ViewPagerTask(), 2, 2, TimeUnit.SECONDS);

}

private class ViewPagerTask implements Runnable {

@Override
public void run() {
currentItem = (currentItem + 1) % imageIds.length;
handler.obtainMessage().sendToTarget();
}

}

private Handler handler = new Handler() {
public void handleMessage(Message msg) {
// 設置當前頁面
mViewPager.setCurrentItem(currentItem);
};
};
private ListView lv;
}
demo下載地址:http://download.csdn.net/detail/zzx410527/7317629
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章