0

を表示するこのループ メソッドがあり、の各画像に対してViewPagerを設定します。そのため、画像をクリックすると、ユーザーは VideoPlayer クラスに移動します。しかし、理由はわかりません。クリックリスナーのオンは、エクストラのオンが最大長であることを常に読み取ります。そのため、常に配列の最大長を超えるため、アプリがクラッシュします。OnClickListenerViewPagerfootage_video_url[i]putExtra()ii

私が期待していたのは、たとえば、表示された画像がfootage_thumbnail_url[1]、エクストラに置かれた文字列がfootage_video_url[1]それぞれである場合などです。私がどこで間違っているか知っている人はいますか?

for(i = 0; i < length; i++){
                final String[] video_url = footage_video_url;
                final String[] thumbnail_url = footage_thumbnail_url;

                //System.out.println("FOOTAGE VIDEO DETAILS " +i+ ": " +video_url[i]);

                FrameLayout content = new FrameLayout(this);
                FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                        (int) size, (int) size);
                params.gravity = Gravity.CENTER;

                ImageView imageView = new ImageView(this);
                ImageLoader loader = new ImageLoader(this);

                // Image from URL
                if (footage_thumbnail_url[i].contains("http"))
                    loader.downloadPicture(imageView, footage_thumbnail_url,i);
                else {
                    // Image From SDCard
                    File imgFile = new File(thumbnail_url[i]);
                    Bitmap bitmapImage = loader.decodeFile(imgFile);
                    Drawable drawableImage = new BitmapDrawable(bitmapImage);
                    imageView.setBackgroundDrawable(drawableImage);

                    imageView.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                            Intent listIntent = new Intent(getApplicationContext(),
                                    VideoPlayer.class);
                            listIntent.putExtra("video_url", footage_video_url[i]);
                            System.out.println("Video Number "+i+" : "+ footage_video_url[i]);
                            startActivity(listIntent);
                        }
                    });
                }


                content.addView(imageView);

                View overlay = new View(this);
                overlay.setBackgroundResource(R.drawable.btn_play);
                params.gravity = Gravity.CENTER;
                overlay.setLayoutParams(params);
                overlay.invalidate();

                content.addView(overlay);
                pagerViews.add(content);



            }
4

2 に答える 2

1

長さ n の配列として imageView を取ります。次に、for ループの前に、次のようなすべての「n」個の imageView のタグを設定する for ループを 1 つ追加します。

for(int x=0;x<length;x++)
     imageView[x].setTag(x);

次に、ループ内で次の行を置き換えます。

listIntent.putExtra("video_url", footage_video_url[i]);
System.out.println("Video Number "+i+" : "+ footage_video_url[i]);

これらの行で:

listIntent.putExtra("video_url", footage_video_url[imageView[i].getTag(i)]);
System.out.println("Video Number "+i+" : "+ footage_video_url[imageView[i].getTag(i)]);

これが役立つことを願っています!!

于 2012-07-04T12:20:31.513 に答える
1

ImageView文字列のタグとして設定してからfootage_video_url[i]、 で取得してみてくださいOnClickListener。このようにして、正しい文字列がエクストラに確実に配置されます。

imageView.setTag(footage_video_url[i]);
imageView.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
          String theUrl = (String) v.getTag(); // I hope it's a String
          Intent listIntent = new Intent(getApplicationContext(),
                                    VideoPlayer.class);
          listIntent.putExtra("video_url", theUrl);
          System.out.println("Video Number "+i+" : "+ theUrl);
          startActivity(listIntent);
     }
});
于 2012-07-04T12:21:13.923 に答える