我正在使用 this project (Android-Coverflow)在我的应用程序中,它按预期工作,但有一个异常(exception):在 instantiateItem
中的单个项目上设置 View.OnClickListener
时,我确实得到了错误的位置,即:
- 中间项返回正确的位置。
- 中间item右边的item显示正确位置(middle-item + 1)
- 中间项左侧的项显示错误的位置:与右侧的项相同。
因此,如果我滚动到目前为止索引为 3 的项目位于中间,我会得到
- 3 代表中间项目(正确)
- 4 代表右边的项目(正确)
- 4 代表左边的项目(错误)
我在 instantiateItem
方法中添加了 ClickListener
,所以我希望它是正确的...
我可能在这里遗漏了什么?
我将改编后的项目上传到 Github:https://github.com/haemi/Android-Coverflow-Clicklistener-Issue - 在“transformer coverflow 2”中,问题是可见的。相应的代码在这里:https://github.com/haemi/Android-Coverflow-Clicklistener-Issue/blob/master/app/src/main/java/me/crosswall/coverflow/demo/Normal2Activity.java#L63
最佳答案
试试这个,
@Override
public Object instantiateItem(ViewGroup container, final int position) {
final TextView view = new TextView(Normal2Activity.this);
view.setText("Item " + position);
view.setGravity(Gravity.CENTER);
view.setBackgroundColor(Color.argb(255, position * 50, position * 10, position * 50));
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(Normal2Activity.this, "position: " + position, Toast.LENGTH_SHORT).show();
}
});
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, final int position, Object object) {
((ViewPager) container).removeViewAt(position);
}
这是完整的代码。
public class Normal2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_normal2);
PagerContainer mContainer = (PagerContainer) findViewById(R.id.pager_container);
final ViewPager pager = mContainer.getViewPager();
PagerAdapter adapter = new MyPagerAdapter();
pager.setAdapter(adapter);
pager.setOffscreenPageLimit(adapter.getCount());
pager.setClipChildren(false);
boolean showRotate = getIntent().getBooleanExtra("showRotate",true);
if(showRotate){
new CoverFlow.Builder()
.with(pager)
.scale(0.3f)
.pagerMargin(0f)
.spaceSize(0f)
.rotationY(25f)
.build();
}
}
private class MyPagerAdapter extends PagerAdapter {
@Override
public Object instantiateItem(ViewGroup container, final int position) {
final TextView view = new TextView(Normal2Activity.this);
view.setText("Item " + position);
view.setGravity(Gravity.CENTER);
view.setBackgroundColor(Color.argb(255, position * 50, position * 10, position * 50));
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(Normal2Activity.this, "position: " + position, Toast.LENGTH_SHORT).show();
System.out.println("position:::::::::::::" + position);
}
});
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, final int position, Object object) {
((ViewPager) container).removeViewAt(position);
}
@Override
public int getCount() {
return 15;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
}
}
关于android - PagerAdapter 中的 ClickListener 在错误的位置触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39327906/