【问题标题】:the tab screen appears blank activity选项卡屏幕出现空白活动
【发布时间】:2018-01-04 11:31:31
【问题描述】:
public class SongsTab extends Fragment {
    private ArrayList<songInfo> _songs = new ArrayList<songInfo>();
    RecyclerView recyclerView;
    SeekBar seekBar;
    songAdapter songAdapter1;
    MediaPlayer mediaPlayer;
    private Handler myHandler = new Handler();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_main, container, false);
        recyclerView = (RecyclerView)v. findViewById(R.id.recyclerView);
        CardView cardView = (CardView) v.findViewById(R.id.card);
        seekBar = (SeekBar) v.findViewById(R.id.seekBar);
        songAdapter1 = new songAdapter(getActivity(),_songs);
        recyclerView.setAdapter(songAdapter1);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
                linearLayoutManager.getOrientation());
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.addItemDecoration(dividerItemDecoration);
        songAdapter1.setOnItemClickListener(new songAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(RecyclerView.ViewHolder holder, View view, final songInfo obj, int position) {
                if(mediaPlayer.isPlaying()){
                    mediaPlayer.stop();
                    mediaPlayer.reset();
                    mediaPlayer.release();
                    mediaPlayer = null;

                }else {

                    Runnable runnable = new Runnable() {
                        @Override
                        public void run() {
                            try {
                                mediaPlayer = new MediaPlayer();
                                mediaPlayer.setDataSource(obj.getSongUrl());
                                mediaPlayer.prepareAsync();
                                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                                    @Override
                                    public void onPrepared(MediaPlayer mp) {
                                        mp.start();
                                        seekBar.setProgress(0);
                                        seekBar.setMax(mediaPlayer.getDuration());
                                        Log.d("Prog", "run: " + mediaPlayer.getDuration());
                                    }
                                });
                                Log.i("devesh","vikas");



                            }catch (Exception e){}
                        }

                    };
                    myHandler.postDelayed(runnable,100);

                }
            }
        });
        checkUserPermission();

        Thread t = new runThread();
        t.start();
        return v;
    }

    public class runThread extends Thread {


        @Override
        public void run() {
            while (true) {

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Log.d("Runwa", "run: " + 1);
                if (mediaPlayer != null) {
                    seekBar.post(new Runnable() {
                        @Override
                        public void run() {
                            seekBar.setProgress(mediaPlayer.getCurrentPosition());
                        }
                    });

                    Log.d("Runwa", "run: " + mediaPlayer.getCurrentPosition());
                }
            }
        }

    }

    private void checkUserPermission(){
        if(Build.VERSION.SDK_INT>=23){
            if(ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED){
                requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},123);
                return;
            }
        }
        loadSongs();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case 123:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    loadSongs();
                }else{
                    Toast.makeText(getContext(), "Permission Denied", Toast.LENGTH_SHORT).show();
                    checkUserPermission();
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        }

    }

    private void loadSongs(){
        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        String selection = MediaStore.Audio.Media.IS_MUSIC+"!=0";
        Cursor cursor = getContext().getContentResolver().query(uri,null,selection,null,null);
        if(cursor != null){
            if(cursor.moveToFirst()){
                do{
                    String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
                    String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                    String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));

                    songInfo s = new songInfo(name,artist,url);
                    _songs.add(s);
                    songAdapter1.notifyDataSetChanged();
                }while (cursor.moveToNext());
            }

            cursor.close();
            songAdapter1 = new songAdapter(getActivity(),_songs);

        }
    }
}

我正在尝试获取选项卡活动中的歌曲列表,但是当应用程序运行时它显示为空白并显示:

没有附加适配器,跳过布局

但是,当我在没有选项卡活动的其他项目中运行相同的代码时,它可以正常工作。请帮忙。如果您需要其他详细信息,请告诉我。

这是我的日志:

没有连接适配器;跳过布局 01-04 02:56:42.346 24747-24775/com.example.murarilal.musicmania E/EGL_emulation: tid 24775: eglSurfaceAttrib(1223): 错误 0x3009 (EGL_BAD_MATCH) 01-04 02:56:42.346 24747-24775/com.example.murarilal.musicmania W/OpenGLRenderer:失败 在表面 0x9e211d00 上设置 EGL_SWAP_BEHAVIOR,error=EGL_BAD_MATCH 01-04 02:56:42.352 24747-24747/com.example.murarilal.musicmania I/Choreographer:跳过了 33 帧!该应用程序可能也在做 在它的主线程上做了很多工作。 01

【问题讨论】:

  • loadSongs()方法最后一行添加recyclerView.setAdapter(songAdapter1 )
  • 没用....

标签: android android-layout android-fragments android-linearlayout android-mediaplayer


【解决方案1】:

我认为您夸大了错误的 XML。如果有fragment_songs_tab.xml,请尝试膨胀fragment_songs_tab 而不是fragment_main

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_songs_tab, container, false);
    return v;
 }

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    // add your code here which executes after the execution of onCreateView() method.

}

参考Difference Between ViewCreated and CreateView

Difference between onCreateView and onViewCreated in Fragment

【讨论】:

  • 我编辑了这个,谢谢。但即使现在我也没有得到列表
  • 尝试从加载歌曲功能中删除songAdapter1 = new songAdapter(getActivity(),_songs);。并尝试在主线程中调用加载歌曲。
  • R u 确定 Frsgment 已加载并且调用了加载歌曲函数
  • 并在创建视图中执行通胀和返回视图,并在 onViewCreated() 方法中执行所有其他操作。
  • 我有一个搜索栏,看起来很完美。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 2015-06-21
  • 2020-10-15
  • 1970-01-01
  • 2016-04-27
相关资源
最近更新 更多