使用Umano SlidingUpPanel后,片段和ListView无法滚动

时间:2018-12-29 17:09:05

标签: java android xml

我有4个片段活动,其中一个包含一个listview。实施Umano SlidingUpPanel后,我无法滚动浏览列表视图或浏览片段。

我尝试使用Google搜索,但发现的唯一内容是“无法在SlidingUpPanel内部滚动列表视图”

public class songsFragment extends Fragment implements MediaController.MediaPlayerControl {

private ArrayList<Song> songList;
private MusicService musicSrv;
private Intent playIntent;
private boolean musicBound=false;

RelativeLayout trackRelLay;

public songsFragment() {
}

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.songs_fragment, container, false);
    trackRelLay = v.findViewById(R.id.trackRelLay);
    return v;

}

@SuppressLint("ClickableViewAccessibility")
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(Objects.requireNonNull(getActivity()),Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);

            return;
        }
    }

    ListView songView = view.findViewById(R.id.song_list);
    songList = new ArrayList<>();

    getSongList();

    setController(view);

    Collections.sort(songList, new Comparator<Song>(){
        public int compare(Song a, Song b){
            return a.getTitle().compareTo(b.getTitle());
        }
    });

    SongAdapter songAdt = new SongAdapter(getActivity(), songList);
    songView.setAdapter(songAdt);

    songView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            songPicked(view);
        }
    });

}

private ServiceConnection musicConnection = new ServiceConnection(){

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        MusicService.MusicBinder binder = (MusicService.MusicBinder)service;
        //get service
        musicSrv = binder.getService();
        //pass list
        musicSrv.setList(songList);
        musicBound = true;
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        musicBound = false;
    }
};

public void getSongList() {

    ContentResolver musicResolver = Objects.requireNonNull(getActivity()).getContentResolver();
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    @SuppressLint("Recycle") Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);

    if(musicCursor!=null && musicCursor.moveToFirst()){
        //get columns
        int titleColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.TITLE);
        int idColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media._ID);
        int artistColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.ARTIST);

        //add songs to list
        do {
            long thisId = musicCursor.getLong(idColumn);
            String thisTitle = musicCursor.getString(titleColumn);
            String thisArtist = musicCursor.getString(artistColumn);

            songList.add(new Song(thisId, thisTitle, thisArtist));
        }
        while (musicCursor.moveToNext());

    }
}

@Override
public void onStart() {
    super.onStart();
    if(playIntent==null){
        playIntent = new Intent(getContext(), MusicService.class);
        Objects.requireNonNull(getActivity()).bindService(playIntent, musicConnection, Context.BIND_AUTO_CREATE);
        getActivity().startService(playIntent);
    }
}

@Override
public void start() {

}

@Override
public void pause() {

}

@Override
public int getDuration() {
    return 0;
}

@Override
public int getCurrentPosition() {
    return 0;
}

@Override
public void seekTo(int pos) {

}

@Override
public boolean isPlaying() {
    return false;
}

@Override
public int getBufferPercentage() {
    return 0;
}

@Override
public boolean canPause() {
    return false;
}

@Override
public boolean canSeekBackward() {
    return false;
}

@Override
public boolean canSeekForward() {
    return false;
}

@Override
public int getAudioSessionId() {
    return 0;
}

private void setController(View view){

    MusicController controller = new MusicController(getActivity());

    controller.setMediaPlayer(this);
    controller.setAnchorView(view.findViewById(R.id.song_list));
    controller.setEnabled(true);

}

private void songPicked(View view) {

    musicSrv.setSong(Integer.parseInt(view.getTag().toString()));
    musicSrv.playSong();

}

@Override
public void onDestroy() {
    Objects.requireNonNull(getActivity()).stopService(playIntent);
    musicSrv=null;
    super.onDestroy();
}
}

activity_main

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<com.sothree.slidinguppanel.SlidingUpPanelLayout 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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="bottom"
    tools:context=".MainActivity"
    app:umanoPanelHeight="70dp"
    app:umanoShadowHeight="5dp"
    app:umanoDragView="@layout/songs_fragment">

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <include layout="@layout/songs_fragment" />

    </android.support.design.widget.CoordinatorLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true"
        android:focusable="true" >

        <include layout="@layout/now_playing"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </RelativeLayout>

</com.sothree.slidinguppanel.SlidingUpPanelLayout>

songs_fragment.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".songsFragment" >

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="fixed"
            app:tabGravity="fill"/>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"  />

<RelativeLayout
    android:id="@+id/trackRelLay"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/song_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true">

    </ListView>

</RelativeLayout>

0 个答案:

没有答案