已经使用ViewPager实现了滑动的效果,但是发现子页原本的事件监听都失效了 需要移到ViewPager页的instantiateItem方法中,但是这样的8 9个页面的方法都在一起很乱。请问如何在使用ViewPager整合后使子页原本的事件监听都还能用。viewpager事件监听失效
解决方案 »
- Android 查看数据库 file is encrypted or is not a database
- 贴图分辨率问题
- 如何用多个按钮分别实现多个Activity间的切换
- 老师:请问,android下的语音识别源码中,哪一部分是从声音(或声音文件)中提取特征参数的?
- Android中调用Webservice是出错,大侠们知道错在哪里吗?
- 在SDK模拟器里,安装了网易应用,又下载安装了植物大战僵尸,为啥玩不了?有声音没画面。
- 在android系统环境下编译jni,没有报错,但是生成的so中增加的接口和代码无效
- android 已经连接的客户端socket如何监测当前服务器的是否中途关闭
- Android Mainfest
- 不知如何处理的错误
- Arcgis for Android加载tpk文件遇到的错误
- 关于native层用NewByteArray分配内存的问题
里面有
public void onPageSelected(final int arg0)
在这里定义对应的事件试试
给你举个小例子吧,你参考一下:
我的layout1里有imageView1 layout2里有imageView2...
我要给他们绑定点击事件,绑在外面,切换就清失了,因为view改变了myViewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(final int arg0) {
View v = mListViews.get(arg0);
final ImageView iv = (ImageView) findViewById(getResources().getIdentifier("imageView"+(arg0+1), "id", "com.android.testPackage"));
iv.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
......//so on
1.使用onPageSelected监听
2.把事件先添加好,在instantiateItem里面只获取List<View>的引用,不改变它的事件
您的第2种能给个简单的demo吗?麻烦了...
您的第2种能给个简单的demo吗?麻烦了...package com.example.androidtest;import java.util.ArrayList;
import java.util.List;import android.annotation.SuppressLint;
import android.app.Activity;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.PageTransformer;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;@SuppressLint("NewApi")
public class ViewPagerActivity extends Activity{ private List<String> listData=new ArrayList<String>(); private List<View> listView=new ArrayList<View>();
private List<List<String>> listStations=new ArrayList<List<String>>();
ViewPager viewPager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_viewpager); viewPager=(ViewPager)this.findViewById(R.id.viewPager); viewPager.setPageMargin(10);
viewPager.setPageMarginDrawable(R.drawable.ic_launcher); viewPager.setPageTransformer(true, new ZoomOutPageTransformer()); this.findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
initData();
}
});
} @SuppressLint("NewApi")
public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;
@SuppressLint("NewApi")
public void transformPage(View view, float position)
{
int pageWidth = view.getWidth();
int pageHeight = view.getHeight();
Log.d("dd",view.getTag()+" pageWidth:"+pageWidth+" pageHeight:"+pageHeight+" position:"+position);
if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 1) { // [-1,1] // Modify the default slide transition to shrink the page as well
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
float vertMargin = pageHeight * (1 - scaleFactor) / 2;
float horzMargin = pageWidth * (1 - scaleFactor) / 2;
if (position < 0) {
view.setTranslationX(horzMargin - vertMargin / 2);
}
else {
view.setTranslationX(-horzMargin + vertMargin / 2);
} // Scale the page down (between MIN_SCALE and 1)
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor); // Fade the page relative to its size.
view.setAlpha(MIN_ALPHA +(scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
} else { // (1,+Infinity] // This page is way off-screen to the right.
view.setAlpha(0);
}
}
} private void initData(){
for(int i=0;i<5;i++){
View view=LayoutInflater.from(this).inflate(R.layout.activity_viewpager_item, null);
view.setTag("索引:"+i);
listView.add(view); List<String> listStation=new ArrayList<String>();
for(int j=0;j<50;j++){
listStation.add("站点:"+j);
}
listStations.add(listStation);
} viewPager.setAdapter(new PagerAdapter() { @Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
} @Override
public int getCount() {
return listView.size();
} @Override
public Object instantiateItem(ViewGroup container, final int position) {
View view=listView.get(position);
ListView lv= (ListView) view.findViewById(R.id.listView1);
lv.setAdapter(new BaseAdapter() { @Override
public View getView(int p, View convertView, ViewGroup parent) {
if(convertView==null){
convertView=LayoutInflater.from(ViewPagerActivity.this).inflate(android.R.layout.simple_list_item_1, null);
} ((TextView)convertView.findViewById(android.R.id.text1)).setText(listStations.get(position).get(p));
return convertView;
} @Override
public long getItemId(int p) {
return p;
} @Override
public Object getItem(int p) {
// TODO Auto-generated method stub
return listStations.get(position).get(p);
} @Override
public int getCount() {
return listStations.get(position).size();
}
});
container.addView(listView.get(position)); return listView.get(position);
} @Override
public void destroyItem(ViewGroup container, int position,
Object object) {
container.removeView(listView.get(position));
}
});
viewPager.setCurrentItem(0);
}}
您的第2种能给个简单的demo吗?麻烦了...
package com.example.androidtest;import java.util.ArrayList;
import java.util.List;import android.annotation.SuppressLint;
import android.app.Activity;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.PageTransformer;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;@SuppressLint("NewApi")
public class ViewPagerActivity extends Activity{ private List<String> listData=new ArrayList<String>(); private List<View> listView=new ArrayList<View>();
private List<List<String>> listStations=new ArrayList<List<String>>();
ViewPager viewPager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_viewpager); viewPager=(ViewPager)this.findViewById(R.id.viewPager); viewPager.setPageMargin(10);
viewPager.setPageMarginDrawable(R.drawable.ic_launcher); viewPager.setPageTransformer(true, new ZoomOutPageTransformer()); this.findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
initData();
}
});
} @SuppressLint("NewApi")
public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;
@SuppressLint("NewApi")
public void transformPage(View view, float position)
{
int pageWidth = view.getWidth();
int pageHeight = view.getHeight();
Log.d("dd",view.getTag()+" pageWidth:"+pageWidth+" pageHeight:"+pageHeight+" position:"+position);
if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 1) { // [-1,1] // Modify the default slide transition to shrink the page as well
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
float vertMargin = pageHeight * (1 - scaleFactor) / 2;
float horzMargin = pageWidth * (1 - scaleFactor) / 2;
if (position < 0) {
view.setTranslationX(horzMargin - vertMargin / 2);
}
else {
view.setTranslationX(-horzMargin + vertMargin / 2);
} // Scale the page down (between MIN_SCALE and 1)
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor); // Fade the page relative to its size.
view.setAlpha(MIN_ALPHA +(scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
} else { // (1,+Infinity] // This page is way off-screen to the right.
view.setAlpha(0);
}
}
} private void initData(){
for(int i=0;i<5;i++){
View view=LayoutInflater.from(this).inflate(R.layout.activity_viewpager_item, null);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 在这里添加点击事件
}
});
view.setTag("索引:"+i);
listView.add(view); List<String> listStation=new ArrayList<String>();
for(int j=0;j<50;j++){
listStation.add("站点:"+j);
}
listStations.add(listStation);
} viewPager.setAdapter(new PagerAdapter() { @Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
} @Override
public int getCount() {
return listView.size();
} @Override
public Object instantiateItem(ViewGroup container, final int position) {
View view=listView.get(position);
ListView lv= (ListView) view.findViewById(R.id.listView1);
lv.setAdapter(new BaseAdapter() { @Override
public View getView(int p, View convertView, ViewGroup parent) {
if(convertView==null){
convertView=LayoutInflater.from(ViewPagerActivity.this).inflate(android.R.layout.simple_list_item_1, null);
} ((TextView)convertView.findViewById(android.R.id.text1)).setText(listStations.get(position).get(p));
return convertView;
} @Override
public long getItemId(int p) {
return p;
} @Override
public Object getItem(int p) {
// TODO Auto-generated method stub
return listStations.get(position).get(p);
} @Override
public int getCount() {
return listStations.get(position).size();
}
});
container.addView(listView.get(position)); return listView.get(position);
} @Override
public void destroyItem(ViewGroup container, int position,
Object object) {
container.removeView(listView.get(position));
}
});
viewPager.setCurrentItem(0);
}}
您的第2种能给个简单的demo吗?麻烦了...
package com.example.androidtest;import java.util.ArrayList;
import java.util.List;import android.annotation.SuppressLint;
import android.app.Activity;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.PageTransformer;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;@SuppressLint("NewApi")
public class ViewPagerActivity extends Activity{ private List<String> listData=new ArrayList<String>(); private List<View> listView=new ArrayList<View>();
private List<List<String>> listStations=new ArrayList<List<String>>();
ViewPager viewPager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_viewpager); viewPager=(ViewPager)this.findViewById(R.id.viewPager); viewPager.setPageMargin(10);
viewPager.setPageMarginDrawable(R.drawable.ic_launcher); viewPager.setPageTransformer(true, new ZoomOutPageTransformer()); this.findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
initData();
}
});
} @SuppressLint("NewApi")
public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;
@SuppressLint("NewApi")
public void transformPage(View view, float position)
{
int pageWidth = view.getWidth();
int pageHeight = view.getHeight();
Log.d("dd",view.getTag()+" pageWidth:"+pageWidth+" pageHeight:"+pageHeight+" position:"+position);
if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 1) { // [-1,1] // Modify the default slide transition to shrink the page as well
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
float vertMargin = pageHeight * (1 - scaleFactor) / 2;
float horzMargin = pageWidth * (1 - scaleFactor) / 2;
if (position < 0) {
view.setTranslationX(horzMargin - vertMargin / 2);
}
else {
view.setTranslationX(-horzMargin + vertMargin / 2);
} // Scale the page down (between MIN_SCALE and 1)
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor); // Fade the page relative to its size.
view.setAlpha(MIN_ALPHA +(scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
} else { // (1,+Infinity] // This page is way off-screen to the right.
view.setAlpha(0);
}
}
} private void initData(){
for(int i=0;i<5;i++){
View view=LayoutInflater.from(this).inflate(R.layout.activity_viewpager_item, null);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 在这里添加点击事件
}
});
view.setTag("索引:"+i);
listView.add(view); List<String> listStation=new ArrayList<String>();
for(int j=0;j<50;j++){
listStation.add("站点:"+j);
}
listStations.add(listStation);
} viewPager.setAdapter(new PagerAdapter() { @Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
} @Override
public int getCount() {
return listView.size();
} @Override
public Object instantiateItem(ViewGroup container, final int position) {
View view=listView.get(position);
ListView lv= (ListView) view.findViewById(R.id.listView1);
lv.setAdapter(new BaseAdapter() { @Override
public View getView(int p, View convertView, ViewGroup parent) {
if(convertView==null){
convertView=LayoutInflater.from(ViewPagerActivity.this).inflate(android.R.layout.simple_list_item_1, null);
} ((TextView)convertView.findViewById(android.R.id.text1)).setText(listStations.get(position).get(p));
return convertView;
} @Override
public long getItemId(int p) {
return p;
} @Override
public Object getItem(int p) {
// TODO Auto-generated method stub
return listStations.get(position).get(p);
} @Override
public int getCount() {
return listStations.get(position).size();
}
});
container.addView(listView.get(position)); return listView.get(position);
} @Override
public void destroyItem(ViewGroup container, int position,
Object object) {
container.removeView(listView.get(position));
}
});
viewPager.setCurrentItem(0);
}}
很感谢你的demo 这样依旧需要把所有分页的后台写在ViewPager中,看来好像没什么好办法了。
在viewpager中对事件进行监听,具体实现到别去,这样代码结构会清晰很多
例子
viewpager 中
gobButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
//viewPager.setCurrentItem(1);
viewPager.setCurrentItem(2);
Third third=new Third();
third.aa(TestViewPager.this);
}
});
在其他类或Third activity后台:
public void aa(Activity sa)
{
String a="";
tv=(TextView)sa.findViewById(R.id.tvtt);
tv.setText("哈哈搞定");
Toast.makeText(sa, "OK", Toast.LENGTH_SHORT).show();
}