質問です。androidで動画をListviewで再生するとエラーが起きます。

androidのアプリをjavaでandroidstudioで作成しています。
googlemapをタップすると周辺10㎞のツイートを表示するというアプリです。 
問題点
取得したツイートをListviewに表示する際、動画を表示させたいのですが
・該当のツイートではないのに動画が表示される
・動画を表示させると落ちる
・listviewを戻しても動画が再生されない。
という問題が起きます。
SurfaceView、mediaplayerを使用して動画を再生しています。
解決方法をよろしくお願い致します。
 
以下のコード
public class MapsSubActivity extends ListActivity {

    private TweetAdapter01 mAdapter;
    private Twitter mTwitter;
    public SurfaceView mSurfaceView;
    public SurfaceHolder mHolder;
    public MediaPlayer mMediaPlayer;
    public String path1 = "";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mAdapter = new TweetAdapter01(this);
        reloadTimeLine();
        setListAdapter(mAdapter);
    }


    private void reloadTimeLine() {
        AsyncTask<Void, Void, List<Status>> task = new AsyncTask<Void, Void, List<twitter4j.Status>>() {



            //経度緯度の受け渡し
            Intent intent = getIntent();
            String strLat = intent.getStringExtra("strLat");//除外ワード
            String strLong = intent.getStringExtra("strLong");//アカウントを指定
            double dLat = Double.parseDouble(strLat);
            double dLong = Double.parseDouble(strLong);


            public final String API_KEY = "XXXXXXX";
            public final String API_SECRET = "XXXXXXX";
            public final String ACCESS_TOKEN = "XXXXXXX";
            public final String ACCESS_TOKEN_SECRET = "XXXXXXX";

            @Override
            protected List<twitter4j.Status> doInBackground(Void... params) {
                try {


                    String strQuery = null;
                    Twitter tw = new TwitterFactory().getInstance();
                    tw.setOAuthConsumer(API_KEY, API_SECRET);
                    AccessToken at = new AccessToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
                    tw.setOAuthAccessToken(at);
                    ArrayList<twitter4j.Status> list = new ArrayList<twitter4j.Status>();
                    Query query = new Query();                  
                        query.setCount(100);
                        GeoLocation geo = new GeoLocation(dLat, dLong);
                        query.setGeoCode(geo, 10.0, Query.KILOMETERS);
                        query.setQuery(strQuery);
                        QueryResult result = tw.search(query);
                        String str = String.valueOf(result.getCount());

                        for (twitter4j.Status tweet : result.getTweets()) {
                            list.add(tweet);
                        }
                        if (result.hasNext()) {
                            query = result.nextQuery();
                        } 
                    return list;
                } catch(TwitterException e){
                    e.printStackTrace();
                }

                return null;
            }

            @Override
            protected void onPostExecute(List<twitter4j.Status> result) {
                if (result != null) {
                    mAdapter.clear();
                    for (twitter4j.Status status : result) {
                        mAdapter.add(status);
                        Log.d("testE","zoku");
                    }
                    getListView().setSelection(0);
                } else {
                }
            }
        };
        task.execute();
    }

    private class TweetAdapter01 extends ArrayAdapter<Status> {

        private LayoutInflater mInflater;

        public TweetAdapter01(Context context) {
            super(context, android.R.
                    layout.simple_list_item_1);
            mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = mInflater.inflate(R.layout.list_item_searchsub, null);
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.list_item_searchsub, null);
            }

            Status item = getItem(position);
            SmartImageView icon = (SmartImageView) convertView.findViewById(R.id.icon);
            icon.setImageUrl(item.getUser().getProfileImageURL());
            Log.d("testItem",item.getUser().getProfileImageURL());
            TextView name = (TextView) convertView.findViewById(R.id.name);
            name.setText(item.getUser().getName());
            TextView screenName = (TextView) convertView.findViewById(R.id.screen_name);
            screenName.setText("@" + item.getUser().getScreenName());
            TextView text = (TextView) convertView.findViewById(R.id.text);
            text.setText(item.getText());
            mSurfaceView = (SurfaceView) findViewById(R.id.surfaceview);
            SmartImageView image1 = (SmartImageView) convertView.findViewById(R.id.image1);
            SmartImageView image2 = (SmartImageView) convertView.findViewById(R.id.image2);
            SmartImageView image3 = (SmartImageView) convertView.findViewById(R.id.image3);
            SmartImageView image4 = (SmartImageView) convertView.findViewById(R.id.image4);
            image1.setVisibility(INVISIBLE);
            image2.setVisibility(INVISIBLE);
            image3.setVisibility(INVISIBLE);
            image4.setVisibility(INVISIBLE);

            ExtendedMediaEntity[] mediaEntitys = item.getExtendedMediaEntities();


            List list = new ArrayList();
            for( int i = 0; i < mediaEntitys.length; i ++ ){
                ExtendedMediaEntity extendedMediaEntity = mediaEntitys[i];
                ExtendedMediaEntity.Variant[] variant = extendedMediaEntity.getVideoVariants();
                if (extendedMediaEntity.getType().equals("video")) {
                        list.add(variant[i].getUrl());
                }
                else{list.add(extendedMediaEntity.getMediaURLHttps());}
            }


            String[] medias = ( String[] )list.toArray( new String[0] );
            for (int i=0;i < medias.length;i++) {
                if(i==0) {
                    if (medias[i].contains("video")) {

                        mSurfaceView.setVisibility(VISIBLE);
                        // Windowを透明にする
                        getWindow().setFormat(PixelFormat.TRANSPARENT);
                        // SurfaceViewにコールバックを設定
                        path1 = null;
                        path1 = medias[i];
                        mHolder = mSurfaceView.getHolder();
                        mHolder.addCallback(mCallback);

                    }
                    //
                    else {
                        image1.setVisibility(VISIBLE);
                        image1.setImageUrl(medias[i]);
                        Log.d("test201804", medias[i]);
                    }
                }
                if(i==1){
                    image2.setVisibility(VISIBLE);
                    image2.setImageUrl(medias[i]);
                    Log.d("test201804",medias[i]);
                }
                if(i==2){
                    image3.setVisibility(VISIBLE);
                    image3.setImageUrl(medias[i]);
                    Log.d("test201804",medias[i]);
                }
                if(i==3){
                    image4.setVisibility(VISIBLE);
                    image4.setImageUrl(medias[i]);
                    Log.d("test201804",medias[i]);
                }

            }

            return convertView;
        }
    }



    private final SurfaceHolder.Callback mCallback = new SurfaceHolder.Callback() {


        /** SurfaceViewが生成された時に呼び出される */
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
         //   public final String path = "ファイルパスかURL";
            try {

                // MediaPlayerを生成
                mMediaPlayer = new MediaPlayer();
                // 動画ファイルをMediaPlayerに読み込ませる
             //   Log.d("mediaplayertest",path1);

                mMediaPlayer.setDataSource(path1);
                // 読み込んだ動画ファイルを画面に表示する
                mMediaPlayer.setDisplay(holder);
                mMediaPlayer.prepare();
                mMediaPlayer.setOnPreparedListener(new MediaPlayer. OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mMediaPlayer.start();
                    }
                });
               // mMediaPlayer.start();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();

            } catch (SecurityException e) {
                e.printStackTrace();

            } catch (IllegalStateException e) {
                e.printStackTrace();

            } catch (IOException e) {
                e.printStackTrace();

            } finally {

            }
        }

        //
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

        }

        /** SurfaceViewが終了した時に呼び出される */
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            if (mMediaPlayer != null) {
                mMediaPlayer.release();
                mMediaPlayer = null;

                mSurfaceView.setVisibility(INVISIBLE);
                path1 = null;
            }
        }

    };

}