如何通过水平滑动来更改TextView的内容?

如何解决如何通过水平滑动来更改TextView的内容?

我有一个正在使用的有声读物应用程序。如果书中有音频,将显示控制器。如果没有,它将仅显示文本。我只想在文本上滑动即可切换章节。我当前正在使用RelativeLayout,文本包装在ScrollView中。我读到我应该使用ViewPager。但是我想知道是否可以继续使用RelativeLayout和ScrollView。

player.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/mainbg">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/m_tab_color"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

    <LinearLayout
        android:id="@+id/player_footer_bg"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="#FFFFFF"
        android:gravity="center"
        android:orientation="vertical">

        <RelativeLayout
            android:id="@+id/linearButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp">

            <ImageButton
                android:id="@+id/btnRepeat"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_centerVertical="true"
                android:background="@null"
                android:src="@drawable/btn_repeat"
                tools:ignore="ContentDescription" />

            <ImageButton
                android:id="@+id/btnShuffle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_centerVertical="true"
                android:background="@null"
                android:src="@drawable/btn_shuffle"
                tools:ignore="ContentDescription" />

            <ImageButton
                android:id="@+id/btnNext"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerVertical="true"
                android:layout_toEndOf="@+id/btnPlay"
                android:background="@null"
                android:src="@drawable/btn_next"
                tools:ignore="ContentDescription" />

            <ImageButton
                android:id="@+id/btnPlay"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:layout_margin="5dp"
                android:background="@drawable/btn_play"
                android:src="@drawable/pause"
                tools:ignore="ContentDescription" />

            <ImageButton
                android:id="@+id/btnPrevious"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_toStartOf="@+id/btnPlay"
                android:background="@null"
                android:src="@drawable/btn_prev"
                tools:ignore="ContentDescription" />

        </RelativeLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <FrameLayout
                android:id="@+id/ad_view_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <RelativeLayout
                android:id="@+id/ads_startapp"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:visibility="gone">

            </RelativeLayout>

        </LinearLayout>

    </LinearLayout>

    <RelativeLayout
        android:id="@+id/sec_ssekbar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/player_footer_bg"
        android:layout_centerVertical="true"
        android:background="#00ffffff"
        android:paddingLeft="7dp"
        android:paddingRight="7dp">

        <SeekBar
            android:id="@+id/songProgressBar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:paddingLeft="15dp"
            android:paddingRight="15dp"
            android:progressTint="#E94C3D"
            android:thumb="@drawable/pointer"
            android:thumbTint="#E94C3D"
            android:thumbOffset="8dp"/>

        <TextView
            android:id="@+id/songCurrentDurationLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/songProgressBar"
            android:gravity="start"
            android:text="@string/current_duration"
            android:textColor="@color/black"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/songTotalDurationLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_below="@+id/songProgressBar"
            android:gravity="end"
            android:text="@string/total_duration"
            android:textColor="@color/black"
            android:textStyle="bold" />

    </RelativeLayout>

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/sec_ssekbar"
        android:layout_below="@+id/toolbar"
        android:layout_centerInParent="true"
        android:layout_marginStart="3dp"
        android:layout_marginTop="3dp"
        android:layout_marginEnd="3dp"
        android:layout_marginBottom="3dp"
        android:background="#B3FFFFFF">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/text_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="5dp"
                android:layout_marginTop="3dp"
                android:layout_marginEnd="5dp"
                android:layout_marginBottom="3dp"
                android:gravity="center"
                android:text="@string/app_name"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/black"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/text_description"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="5dp"
                android:layout_marginTop="5dp"
                android:layout_marginEnd="5dp"
                android:layout_marginBottom="5dp"
                android:text="@string/app_name"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/black" />

        </LinearLayout>

    </ScrollView>

</RelativeLayout>

MusicPlayActivity.java

public class MusicPlayActivity extends AppCompatActivity implements OnCompletionListener,SeekBar.OnSeekBarChangeListener {

    Toolbar toolbar;
    private ImageButton btnPlay;
    private ImageButton btnRepeat;
    private ImageButton btnShuffle;
    private MediaPlayer mp;
    ImageView img_song;
    private int currentSongIndex = 0;
    private boolean isShuffle = false;
    private boolean isRepeat = false;
    String[] allArrayImage,allArrayMusicCatName,allArrayMusicShare;
    String[] allArrayMusicId,allArrayMusicCatId,allArrayMusicurl,allArrayMusicName,allArrayMusicDuration,allArrayMusicDesc;
    int position = currentSongIndex;
    int music_id;
    private SeekBar songProgressBar;
    private TextView songCurrentDurationLabel;
    private TextView songTotalDurationLabel;
    private Utilities utils;
    private Handler mHandler = new Handler();
    private Menu menu;

    DatabaseHandler db;
    String mp3id,mp3catid,mp3name,mp3url,mp3duration,mp3desc,mp3shareurl,mp3image,mp3catname;

    private ActionClickItem actionClickItem;
    private InterstitialAd mInterstitialAd;
    private int btNextClicked = 1;
    private AdsObj adsObj;
    private StartAppAd startAppAd;
    private boolean runClickExecuted;

    private AdView adView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.player);

        MobileAds.initialize(this,new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {}
        });

        btnPlay = findViewById(R.id.btnPlay);
        ImageButton btnNext = findViewById(R.id.btnNext);
        ImageButton btnPrevious = findViewById(R.id.btnPrevious);
        btnRepeat = findViewById(R.id.btnRepeat);
        btnShuffle = findViewById(R.id.btnShuffle);
        TextView songTitleLabel = findViewById(R.id.text_title);
        TextView songDesc = findViewById(R.id.text_description);
        img_song = findViewById(R.id.image);
        songProgressBar = findViewById(R.id.songProgressBar);
        songCurrentDurationLabel = findViewById(R.id.songCurrentDurationLabel);
        songTotalDurationLabel = findViewById(R.id.songTotalDurationLabel);

        //imageView = (ImageView)findViewById(R.id.full_image);

//      imageLoader=new ImageLoader(this);

        db = new DatabaseHandler(this);

        toolbar = this.findViewById(R.id.toolbar);
        toolbar.setTitle(Constant.MUSIC_NAME);
        this.setSupportActionBar(toolbar);

        Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        utils = new Utilities();
        mp = new MediaPlayer();
        Intent i = getIntent();
        music_id = i.getIntExtra("POSITION",0);
        allArrayImage = i.getStringArrayExtra("MP3_IMAGE");
        allArrayMusicCatName = i.getStringArrayExtra("MP3_CATNAME");
        allArrayMusicShare = i.getStringArrayExtra("MP3_SHARE");
        allArrayMusicId = i.getStringArrayExtra("MP3_CID");
        allArrayMusicCatId = i.getStringArrayExtra("MP3_CATID");
        allArrayMusicurl = i.getStringArrayExtra("MP3_URL");
        allArrayMusicName = i.getStringArrayExtra("MP3_NAME");
        allArrayMusicDuration = i.getStringArrayExtra("MP3_DURATION");
        allArrayMusicDesc = i.getStringArrayExtra("MP3_DISCRIPTION");

        position = getPositionFromArray(String.valueOf(music_id));
        Log.e("POSITIO","" + position);
        playSong(position);
        songProgressBar.setOnSeekBarChangeListener(this);
        mp.setOnCompletionListener(this);

        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // check for already playing
                if (mp.isPlaying()) {
                    if (mp != null) {
                        mp.pause();
                        // Changing button image to play button
                        btnPlay.setImageResource(R.drawable.btn_play);
                    }
                } else {
                    // Resume song
                    if (mp != null) {
                        mp.start();
                        // Changing button image to pause button
                        btnPlay.setImageResource(R.drawable.btn_paush);
                    }
                }
            }
        });


        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                btNextClicked++;
                if ((btNextClicked % 3 == 0)) {
                    actionItemClicked(new ActionClickItem() {
                        @Override
                        public void runClick() {
                            // check if next song is there or not
                            if (position < (allArrayMusicurl.length - 1)) {
                                playSong(position + 1);
                                position = position + 1;
                            } else {
                                // play first song
                                playSong(0);
                                position = 0;
                            }
                        }
                    });
                } else {
                    // check if next song is there or not
                    if (position < (allArrayMusicurl.length - 1)) {
                        position = position + 1;
                        playSong(position + 1);
                    } else {
                        // play first song
                        playSong(0);
                        position = 0;
                    }
                }
            }
        });

        btnPrevious.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                if (position > 0) {
                    playSong(position - 1);
                    position = position - 1;
                } else {
                    // play last song
                    playSong(allArrayMusicurl.length - 1);
                    position = allArrayMusicurl.length - 1;
                }
            }
        });

        btnRepeat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                if (isRepeat) {
                    isRepeat = false;
                    Toast.makeText(getApplicationContext(),"Repeat is OFF",Toast.LENGTH_SHORT).show();
                    btnRepeat.setImageResource(R.drawable.btn_repeat);
                } else {
                    // make repeat to true
                    isRepeat = true;
                    Toast.makeText(getApplicationContext(),"Repeat is ON",Toast.LENGTH_SHORT).show();
                    // make shuffle to false
                    isShuffle = false;
                    btnRepeat.setImageResource(R.drawable.btn_repeat_focused);
                    btnShuffle.setImageResource(R.drawable.btn_shuffle);
                }
            }
        });

        btnShuffle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                if (isShuffle) {
                    isShuffle = false;
                    Toast.makeText(getApplicationContext(),"Shuffle is OFF",Toast.LENGTH_SHORT).show();
                    btnShuffle.setImageResource(R.drawable.btn_shuffle);
                } else {
                    // make repeat to true
                    isShuffle = true;
                    Toast.makeText(getApplicationContext(),"Shuffle is ON",Toast.LENGTH_SHORT).show();
                    // make shuffle to false
                    isRepeat = false;
                    btnShuffle.setImageResource(R.drawable.btn_shuffle_focused);
                    btnRepeat.setImageResource(R.drawable.btn_repeat);
                }
            }
        });

        //int songIndex = i.getIntExtra("songIndex",0);
        // Displaying Song title
        String songTitle = allArrayMusicName[position];
        songTitleLabel.setText(songTitle);
        toolbar.setTitle(songTitle);

        String musicUrl = allArrayMusicurl[position];
        if(musicUrl.equals(".")){
            songProgressBar.setVisibility(View.GONE);
            songCurrentDurationLabel.setVisibility(View.GONE);
            songTotalDurationLabel.setVisibility(View.GONE);

            RelativeLayout linearButton = findViewById(R.id.linearButton);
            linearButton.setVisibility(View.GONE);
        }

        @SuppressLint("CutPasteId") FrameLayout frameAds1 = findViewById(R.id.ad_view_container);
        AdsAssistants adsAssistants = new AdsAssistants(this);
        adsObj = adsAssistants.getSessionAdsObj();

        if (adsObj != null) {
            if (adsObj.getCurrentActivatedAds().equals(AdsConfig.ADS_ADMOB)) {
                frameAds1.setVisibility(View.VISIBLE);

                adsAssistants.createAdmobBanner(frameAds1,adsObj.getADS_ADMOB_BANNER());
            } else {
                startAppAd = new StartAppAd(this);

                @SuppressLint("CutPasteId") FrameLayout frameAds = findViewById(R.id.ad_view_container);
                frameAds.setVisibility(View.VISIBLE);

                adsAssistants.createStartAppBanner(frameAds);
            }
        }
    }

    public void actionItemClicked(ActionClickItem actionClickItemParam) {
        actionClickItem = actionClickItemParam;
        if (adsObj == null) {
            actionClickItem.runClick();
        } else {
            if (adsObj.getCurrentActivatedAds().equals(AdsConfig.ADS_ADMOB)) {
                if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
                    mInterstitialAd.show();
                } else {
                    actionClickItem.runClick();
                    generateInterstitialAd();
                }
            } else {
                startAppAd.loadAd(new AdEventListener() {
                    @Override
                    public void onReceiveAd(Ad ad) {
                    }
                    @Override
                    public void onFailedToReceiveAd(Ad ad) {
//                    actionClickItem.runClick();
                    }
                });

                StartAppAd.disableAutoInterstitial();
                startAppAd.showAd(new AdDisplayListener() {
                    @Override
                    public void adHidden(Ad ad) {
                        if(!runClickExecuted){
                            runClickExecuted = true;
                            actionClickItem.runClick();
                        }
                        Log.d("YWV","Action clicked");
                    }

                    @Override
                    public void adDisplayed(Ad ad) {
                    }

                    @Override
                    public void adClicked(Ad ad) {
                    }

                    @Override
                    public void adNotDisplayed(Ad ad) {
                    }
                });
            }
        }
    }

    private void generateInterstitialAd() {
        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId(adsObj.getADS_ADMOB_INTERSTITIALS());
        mInterstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
//                mNextLevelButton.setEnabled(true);
            }

            @Override
            public void onAdFailedToLoad(int errorCode) {
//                mNextLevelButton.setEnabled(true);
            }

            @Override
            public void onAdClosed() {
                // Proceed to the next level.
                //finish();
                //showDialogApp();
                actionClickItem.runClick();
                generateInterstitialAd();
            }
        });
        AdRequest adRequestIn = new AdRequest.Builder().build();
        mInterstitialAd.loadAd(adRequestIn);
    }

    @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data) {
        super.onActivityResult(requestCode,resultCode,data);
        if (resultCode == 100) {
            position = Objects.requireNonNull(data.getExtras()).getInt("songIndex");
            // play selected song
            playSong(position);

        }else if(resultCode == 11){
            runClickExecuted = false;
        }
    }

    public void playSong(int songIndex) {
        // Play song
        try {
//          if(needResetFirst){
            mp.reset();
//          }
            mp.setDataSource(allArrayMusicurl[songIndex]);
            mp.prepare();
            mp.start();

//            // Displaying Song title
            TextView songTitleLabel = findViewById(R.id.text_title);
            String songTitle = allArrayMusicName[songIndex];
            songTitleLabel.setText(songTitle);
            toolbar.setTitle(songTitle);

            TextView songDesc = findViewById(R.id.text_description);
            String songDescd = allArrayMusicDesc[songIndex];
            songDesc.setText(songDescd);

            //          Toast.makeText(getApplicationContext(),img_name,Toast.LENGTH_SHORT).show();

//          imageLoader.DisplayImage(Constant.SERVER_IMAGE_UPFOLDER1+img_name,imageView);
//          Log.e("IMAGEPATH",""+Constant.SERVER_IMAGE_UPFOLDER1+img_name);
//          Toast.makeText(getApplicationContext(),Constant.SERVER_IMAGE_UPFOLDER1+img_name,Toast.LENGTH_SHORT).show();

            // Changing Button Image to pause image
            btnPlay.setImageResource(R.drawable.btn_paush);

            songProgressBar.setProgress(0);
            songProgressBar.setMax(100);

            // Updating progress bar
            updateProgressBar();

            // set Progress bar values
        } catch (IllegalArgumentException | IllegalStateException | IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onCompletion(MediaPlayer arg0) {
        // check for repeat is ON or OFF
        if (isRepeat) {
            // repeat is on play same song again
            playSong(position);
        } else if (isShuffle) {
            // shuffle is on - play a random song
            Random rand = new Random();
            position = rand.nextInt((allArrayMusicurl.length - 1) + 1);
            playSong(position);
        } else {
            // no repeat or shuffle ON - play next song
            if (position < (allArrayMusicurl.length - 1)) {
                playSong(position + 1);
                position = position + 1;
            } else {
                // play first song
                playSong(0);
                position = 0;
            }
        }
    }

    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();
        if (mp != null) {
            mp.reset();
            mp.release();
            mp = null;
            mHandler.removeCallbacks(mUpdateTimeTask);
        }
        setResult(RESULT_OK);
        finish();
    }

    public void updateProgressBar() {
        mHandler.postDelayed(mUpdateTimeTask,100);
    }

    private Runnable mUpdateTimeTask = new Runnable() {
        public void run() {
            long totalDuration = mp.getDuration();
            long currentDuration = mp.getCurrentPosition();

            // Displaying Total Duration time
            songTotalDurationLabel.setText(utils.milliSecondsToTimer(totalDuration));
            // Displaying time completed playing
            songCurrentDurationLabel.setText(utils.milliSecondsToTimer(currentDuration));

            // Updating progress bar
            int progress = utils.getProgressPercentage(currentDuration,totalDuration);
            //Log.d("Progress",""+progress);
            songProgressBar.setProgress(progress);

            // Running this thread after 100 milliseconds
            mHandler.postDelayed(this,100);
        }
    };

    @Override
    public void onProgressChanged(SeekBar seekBar,int progress,boolean fromTouch) {
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // remove message Handler from updating progress bar
        mHandler.removeCallbacks(mUpdateTimeTask);
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        mHandler.removeCallbacks(mUpdateTimeTask);
        int totalDuration = mp.getDuration();
        int currentPosition = utils.progressToTimer(seekBar.getProgress(),totalDuration);

        // forward or backward to certain seconds

        mp.seekTo(currentPosition);

        // update timer progress again
        updateProgressBar();
    }

    public void AddtoFav(int position) {
        mp3id = allArrayMusicId[position];
        //      mp3catid=allArrayMusicCatId[position];
        mp3catname = allArrayMusicCatName[position];
        mp3url = allArrayMusicurl[position];
        mp3image = allArrayImage[position];
        mp3name = allArrayMusicName[position];
        mp3duration = allArrayMusicDuration[position];
        mp3desc = allArrayMusicDesc[position];
        //      mp3shareurl=allArrayMusicShare[position];

        db.AddtoFavorite(new Pojo(mp3id,mp3catname,mp3shareurl));
        Toast.makeText(getApplicationContext(),"Added to Favorite",Toast.LENGTH_SHORT).show();
        //      fabfav.setImageDrawable(getResources().getDrawable(R.drawable.fav_hover));

    }

    //remove from favorite
    public void RemoveFav(int position) {
        mp3id = allArrayMusicId[position];
        db.RemoveFav(new Pojo(mp3id));
        Toast.makeText(getApplicationContext(),"Removed from Favorite",Toast.LENGTH_SHORT).show();
        //      fabfav.setImageDrawable(getResources().getDrawable(R.drawable.fav_hover));
    }

    public void FirstFav() {
        mp3id = allArrayMusicId[position];
        List<Pojo> pojolist = db.getFavRow(mp3id);
        if (pojolist.size() == 0) {
            menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.fav));
        } else {
            if (pojolist.get(0).getMp3Id().equals(mp3id)) {
                menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.fav_hover));
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_mp3,menu);
        this.menu = menu;
        //for when 1st item of view pager is favorite mode
        FirstFav();
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem menuItem) {
        switch (menuItem.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                return true;
            case R.id.menu_fav:
                mp3id = allArrayMusicId[position];
                List<Pojo> pojolist = db.getFavRow(mp3id);
                if (pojolist.size() == 0) {
                    AddtoFav(position);//if size is zero i.e means that record not in database show add to favorite
                    menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.fav_hover));
                } else {
                    if (pojolist.get(0).getMp3Id().equals(mp3id)) {
                        RemoveFav(position);
                    }
                    menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.fav));
                }
                return true;
            case R.id.menu_share:
                Intent sharingIntent = new Intent(Intent.ACTION_SEND);
                sharingIntent.putExtra(Intent.EXTRA_TEXT,"Listen to this verse from " + Constant.APP_NAME + "\n" + "http://play.google.com/store/apps/details?id=" + getPackageName());
                sharingIntent.setType("text/plain");
                startActivity(Intent.createChooser(sharingIntent,"Share Link"));
                return true;
            default:
                return super.onOptionsItemSelected(menuItem);
        }
    }

    public int getPositionFromArray(String id) {
        return Arrays.asList(allArrayMusicId).indexOf(id);
    }

    @Override
    public void onResume() {
        super.onResume();
        if (adView != null) {
            adView.resume();
        }
    }

    /** Called when leaving the activity */
    @Override
    public void onPause() {
        if (adView != null) {
            adView.pause();
        }
        super.onPause();
    }
    /** Called before the activity is destroyed */
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mp != null) {
            mp.reset();
            mp.release();
            mHandler.removeCallbacks(mUpdateTimeTask);
            mp = null;
        }
        finish();
        if (adView != null) {
            adView.destroy();
        }
    }
}

提前谢谢!

解决方法

您可以通过在任意视图上附加>>> s='hyödyt' >>> s.encode('cp1252').decode('utf8').encode('cp1252').decode('utf8') 'hyödyt' >>> s='löydät' >>> s.encode('cp1252').decode('utf8').encode('cp1252').decode('utf8') 'löydät' 来检测手势。

但是,在您的情况下,您尝试检测滑动手势,因此最好的解决方案是通过扩展onTouchListener来创建手势检测器类,如本教程(第4步)

>

https://www.tutorialspoint.com/how-to-handle-right-to-left-and-left-to-right-swipe-gestures-on-android

完成此操作后,您可以轻松地将swipe-detector类附加到您的任何视图,如下所示:

onTouchListener
,

您是否尝试过像https://stackoverflow.com/a/12938787/4330467这样添加OnSwipeTouchListener? 相对布局不应该成为问题

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-