简体   繁体   English

viewpager错误的项目位置pageradapter

[英]viewpager wrong item position pageradapter

The instantiateItem on the PagerAdapter of the viewpager sends the wrong item position to the activity called with the intent. instantiateItemPagerAdapter中的viewpager发送了错误的位置调用的意图的活动。 When I click on image 1, it sends the info of image 2, and when i click on image 2, it sends info of image 3, and so on. 当我单击图像1时,它将发送图像2的信息,而当我单击图像2时,它将发送图像3的信息,依此类推。 The receiver activity receives the wrong image and title for the clicked on sender activity. 接收方活动收到的点击的发送方活动收到错误的图像和标题。 I'm using a floatingActionButton with an onclickListener to detect the click. 我使用的是floatingActionButtononclickListener检测点击。

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, final int position) {
    LayoutInflater inflater = (LayoutInflater) 
    mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View slideLayout = inflater.inflate(R.layout.slide_item, null);

    final ImageView slideImg = slideLayout.findViewById(R.id.slide_img);
    final TextView slideText = slideLayout.findViewById(R.id.slide_title);
    final  FloatingActionButton fab = slideLayout.findViewById(R.id.floatingActionButton);

    slideImg.setImageResource(mList.get(position).getImage());
    slideText.setText(mList.get(position).getTitle());
    slideTitle = slideText.getText().toString();
    thumbnail = mList.get(position).getImage();

    container.addView(slideLayout);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(mContext,  MovieDetailActivity.class);
            intent.putExtra("title", slideTitle);
            intent.putExtra("imgURL", thumbnail);
            mContext.startActivity(intent);    
        }
    });

    return slideLayout;
}

Override this method to get current position of a fragment. 重写此方法以获取片段的当前位置。 use this position to get information about the current click. 使用此位置获取有关当前点击的信息。

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {

    Log.i(TAG, "setPrimaryItem: " + position);

    super.setPrimaryItem(container, position, object);
}

The code from Vishrut Mavani works pefectly The final code gets this way Vishrut Mavani的代码可以完美地工作。

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, final int position) {

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View slideLayout = inflater.inflate(R.layout.slide_item, null);

    final ImageView slideImg = slideLayout.findViewById(R.id.slide_img);
    final TextView slideText = slideLayout.findViewById(R.id.slide_title);
    final  FloatingActionButton fab = slideLayout.findViewById(R.id.floatingActionButton);

    slideImg.setImageResource(mList.get(position).getImage());
    slideText.setText(mList.get(position).getTitle());

    container.addView(slideLayout);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent intent = new Intent(mContext, MovieDetailActivity.class);
            intent.putExtra("title", slideTitle);
            intent.putExtra("imgURL", thumbnail);
            mContext.startActivity(intent);



        }
    });

    return slideLayout;

}

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

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
    return view == object;
}


@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {

    container.removeView((View)object);
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object){

    Log.i(TAG, "setPrimaryItem_che: " + position);

    super.setPrimaryItem(container, position, object);

    slideTitle = mList.get(position).getTitle();
    thumbnail = mList.get(position).getImage();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM