Android 为什么适配器总是将最后一项数据发送到另一个活动?

Android 为什么适配器总是将最后一项数据发送到另一个活动?,android,android-recyclerview,Android,Android Recyclerview,这是我的适配器类onBindViewHolder方法: 但是,每次意图是将数据发送到另一个活动,即本例中的WebViewActivity,则列表中的最后一项始终是send,而不是当前数据!广告结束时,情况总是如此 这是向WebviewActivity发送数据的代码,您也可以在代码中看到: detailModel.getClick只是我从数据库收到的链接 如何解决此问题,以便发送当前项目数据而不是最后一个项目数据。请引导 由于屏幕上的所有位置都将调用always onBindViewHolder,

这是我的适配器类onBindViewHolder方法:

但是,每次意图是将数据发送到另一个活动,即本例中的WebViewActivity,则列表中的最后一项始终是send,而不是当前数据!广告结束时,情况总是如此

这是向WebviewActivity发送数据的代码,您也可以在代码中看到:

detailModel.getClick只是我从数据库收到的链接

如何解决此问题,以便发送当前项目数据而不是最后一个项目数据。请引导

由于屏幕上的所有位置都将调用always onBindViewHolder,并且您单击的位置不会调用它,因此最后一项将传递给WebViewActivity

请尝试以下方法:

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

            if (mInterstitialAd.isLoaded()) {
                mInterstitialAd.show();
            } else {
                Intent intent = new Intent(mCtx, WebViewActivity.class);
                intent.putExtra("Web", detailModelList.get(getAdapterPosition).getClick());
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mCtx.startActivity(intent);

            }


        }
    });

    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            // Load the next interstitial.

            Intent intent = new Intent(mCtx, WebViewActivity.class);
            intent.putExtra("Web", String.valueOf(detailModelList.get(getAdapterPosition).getClick()));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            mCtx.startActivity(intent);
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
        }

    });
由于屏幕上的所有位置都将调用always onBindViewHolder,并且您单击的位置不会调用它,因此最后一项将传递给WebViewActivity

请尝试以下方法:

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

            if (mInterstitialAd.isLoaded()) {
                mInterstitialAd.show();
            } else {
                Intent intent = new Intent(mCtx, WebViewActivity.class);
                intent.putExtra("Web", detailModelList.get(getAdapterPosition).getClick());
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mCtx.startActivity(intent);

            }


        }
    });

    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            // Load the next interstitial.

            Intent intent = new Intent(mCtx, WebViewActivity.class);
            intent.putExtra("Web", String.valueOf(detailModelList.get(getAdapterPosition).getClick()));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            mCtx.startActivity(intent);
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
        }

    });

什么是detailModel.getClick;它只是从DatabaseIm收到的链接,有相同的问题,最后一项始终是发送,而不是当前位置项。不知道为什么@Sainita你试过打印currPos值吗?是否正确?是的,我在Logcat中打印,它接收值,但始终是列表中的最后一项。不管我点击哪个cardView,什么是detailModel.getClick;它只是从DatabaseIm收到的链接,有相同的问题,最后一项始终是发送,而不是当前位置项。不知道为什么@Sainita你试过打印currPos值吗?是否正确?是的,我在Logcat中打印,它接收值,但始终是列表中的最后一项。不管我单击哪个cardView抱歉,您的回答只会将当前适配器位置发送到另一个活动。但是,如果您在上面的代码中看到,它发送的是来自列表的实际数据,而不是当前数据position@Sainita正如我看到的,您只发送link detailModel.getClick。您能告诉我您将实际数据发送到哪里吗?@Sainita我已经更新了答案,请检查一下,对不起,您的答案只是将当前适配器位置发送到另一个活动。但是,如果您在上面的代码中看到,它发送的是来自列表的实际数据,而不是当前数据position@Sainita正如我看到的,您只发送link detailModel.getClick。你能告诉我你在哪里发送实际数据吗?@Sainita我已经更新了答案,请检查一下
holder.homeCards.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if (mInterstitialAd.isLoaded()) {
                mInterstitialAd.show();
            } else {
                Intent intent = new Intent(mCtx, WebViewActivity.class);
                intent.putExtra("Web", detailModelList.get(getAdapterPosition).getClick());
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mCtx.startActivity(intent);

            }


        }
    });

    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            // Load the next interstitial.

            Intent intent = new Intent(mCtx, WebViewActivity.class);
            intent.putExtra("Web", String.valueOf(detailModelList.get(getAdapterPosition).getClick()));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            mCtx.startActivity(intent);
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
        }

    });