1

私の .im を入力するときSimpleAdaptergetView()メソッドで、ビデオが既に存在するかどうかを確認します。既に存在する場合は、ボタンの画像を「再生」画像に変更します。それ以外の場合は、その「ダウンロード」イメージを保持します。問題は、リストをスクロールすると、すべてのボタンが「再生」画像に変更されることです。これは私のコードです。何が間違っていますか?

public View getView(int position, View convertView, ViewGroup parent) {
    View row=super.getView(position, convertView, parent);

    TextView videoIdText = (TextView) row.findViewById(R.id.videoId);
    Button downloadButton = (Button) row.findViewById(R.id.videoDownload);

    final String videoId = videoIdText.getText().toString();

    if (videoExists(videoId)) {

        downloadButton.setBackgroundResource( R.drawable.ic_play );
        Drawable d =  downloadButton.getBackground();
        d.setColorFilter(Color.parseColor("#00AA00"),Mode.SRC_ATOP);

        downloadButton.setOnClickListener(new OnClickListener(){ 
            @Override
            public void onClick(View view) {
                if (activity !=null){
                    ((FeedActivity)activity).playVideo(getVideoPath(videoId));
                }       
            }
        });     
    }else{
        downloadButton.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View view) {
                DownloadTask task = new DownloadTask();
                task.setVideoId(videoId);
                task.execute();
            }
        });         
    }
4

2 に答える 2

2

「 」のelse節でif(videoExists(videoId))、デフォルトの「ダウンロード」ボタンの画像とカラー フィルターを設定する必要があります。

これは、リストをスクロールするときにアイテムが再利用されるためです。新しい設定のボタンは、現在再生されていない他のアイテムの新しい設定で再利用されます。


if (videoExists(videoId)) {
    downloadButton.setBackgroundResource( R.drawable.ic_play );
    Drawable d =  downloadButton.getBackground();
    d.setColorFilter(Color.parseColor("#00AA00"), Mode.SRC_ATOP);
    ...
} else {
    downloadButton.setBackgroundResource( R.drawable.ic_download );
    Drawable d =  downloadButton.getBackground();
    d.setColorFilter(Color.parseColor("<download-color>"), Mode.SRC_ATOP);
    ...
}
于 2013-03-30T01:22:21.243 に答える
0

@David Manpearlが述べたように、元の画像を設定する必要がありましたが、ボタンもタグに保存する必要がありました

public View getView(int position, View convertView, ViewGroup parent) {
    View row=super.getView(position, convertView, parent);

    TextView videoIdText = (TextView) row.findViewById(R.id.videoId);
    Button downloadButton = (Button) row.findViewById(R.id.videoDownload);

    final String videoId = videoIdText.getText().toString();

    if ( row.getTag() == null){
         row.setTag(downloadButton);
    }else{
        downloadButton = (Button) row.getTag();
    }

    if (videoExists(videoId)) {

        downloadButton.setBackgroundResource( R.drawable.ic_play );
        Drawable d =  downloadButton.getBackground();
        d.setColorFilter(Color.parseColor("#00AA00"),Mode.SRC_ATOP);

        downloadButton.setOnClickListener(new OnClickListener(){ 
            @Override
            public void onClick(View view) {
                if (activity !=null){
                    ((FeedActivity)activity).playVideo(getVideoPath(videoId));
                }       
            }
        });     
    }else{
        downloadButton.setBackgroundResource( R.drawable.ic_download );
        downloadButton.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View view) {
                DownloadTask task = new DownloadTask();
                task.setVideoId(videoId);
                task.execute();
            }
        });         
    }
于 2013-03-30T09:48:37.003 に答える