Android ViewPager在回扫时不会重新绘制内容

Android ViewPager在回扫时不会重新绘制内容,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,问题 我是android新手,我第一次在我的应用程序和应用程序中使用viewpager 我在我的应用程序中遇到了非常奇怪的行为,即我使用带有三个片段(TrackFragment、AlbumFragment、ArtistFragment)的viewpager,当我将页面从TrackFragment切换到AlbumFragment并再次返回TrackFragment时,页面变为空白(但这不是我第一次在TrackFragment开始时),当我跳转到ArtistFragment或选项卡布局中的任何其他片

问题

我是android新手,我第一次在我的应用程序和应用程序中使用viewpager 我在我的应用程序中遇到了非常奇怪的行为,即我使用带有三个片段(TrackFragment、AlbumFragment、ArtistFragment)的viewpager,当我将页面从TrackFragment切换到AlbumFragment并再次返回TrackFragment时,页面变为空白(但这不是我第一次在TrackFragment开始时),当我跳转到ArtistFragment或选项卡布局中的任何其他片段(其变为空白)时也发生了同样的事情

如果我要从TrackFragment通过AlbumFragments通过滑动页面来ArtistFragment的话,它会正常工作(即内容以页面显示)。

请给我一个方法来克服上述问题或任何其他方法来实现同样的事情。 这是我的密码

main活动

public class MainActivity extends AppCompatActivity {
private String[] mPlanetTitles={"Tracks","Album","Artist"};
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
SharedPreferences sharedPreferences;
Fragment [] fragments = {new TracksFragment(),new AlbumFragment(), new ArtistFragment()};
PagerAdapter pagerAdapter;
   ViewPager viewPager;
   public static ImageView im;
   int pos= -1 ;
   public static Context context;
   MusicService musicService;
   boolean mBound;
   TabLayout tabLayout ;
   public static Uri currentsonguri;
   protected void onCreate(final Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       sharedPreferences = getSharedPreferences("lastplayed",Context.MODE_PRIVATE);

       Intent i = new Intent(MainActivity.this,MusicService.class);
       startService(i);
       mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
       mDrawerList = (ListView) findViewById(R.id.left_drawer);
       mDrawerList.setAdapter(new NavigationDrawerAdapter(this));
       mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               if(position == 3)
               {
                   Intent i = new Intent(MainActivity.this,PlaylistActivity.class);
                    startActivity(i);
               }
               if(position == 4)
               {
                   Intent intent = new Intent();
                   intent.setAction("android.media.action.DISPLAY_AUDIO_EFFECT_CONTROL_PANEL");
                   if((intent.resolveActivity(getPackageManager()) != null)) {
                       startActivity(intent);
                   } else {
                       // No equalizer found :(
                       Toast.makeText(getBaseContext(),"No Equaliser Found",Toast.LENGTH_LONG).show();
                   }
               }

           }
       });

       tabLayout = (TabLayout) findViewById(R.id.tablayout);
       viewPager = (ViewPager) findViewById(R.id.viewPager);
       tabLayout.setTabTextColors(Color.DKGRAY,Color.WHITE);
       tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
       context = getBaseContext();
       pagerAdapter = new myfragment(getSupportFragmentManager());


       im  = (ImageView) findViewById(R.id.currentsong);
               viewPager.setPageTransformer(true, new ZoomOutPageTransformer());
               viewPager.setAdapter(pagerAdapter);
               tabLayout.setupWithViewPager(viewPager,true);

       SharedPreferences.Editor editor= sharedPreferences.edit();
       if(sharedPreferences.getInt("count",0)==0)
       {
           editor.putInt("count",1);
       }
       else
       {
           int c= sharedPreferences.getInt("count",0);
           Log.d("Uses count",c+"");
           editor.putInt("count",c++);
           editor.apply();
       }
       if(!sharedPreferences.getString("uri","").equals(""))
       {
          String s = sharedPreferences.getString("uri","");
           Uri u = Uri.parse(s);
           currentsonguri = u;
           MediaMetadataRetriever data=new MediaMetadataRetriever();
           data.setDataSource(getBaseContext(),u);
           try {
               byte[] b = data.getEmbeddedPicture();
               Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
               bitmap = getRoundedCornerBitmap(bitmap);
               im.setImageBitmap(bitmap);
           }
           catch (Exception e)
           {
               e.printStackTrace();
           }

           try {
               musicService.setsongbyuri(u,getBaseContext());
               musicService.setMediaPlayer();
           }
           catch (Exception e)
           {
               e.printStackTrace();
           }
       }
       else
       {

       }
       editor.apply();
       im.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
          Intent intent = new Intent(MainActivity.this, MusicPlayerActivity.class);
          intent.setData(currentsonguri);
          intent.putExtra("flag",1);
          startActivity(intent);
      }
  });



       final Uri r= getIntent().getData();
          if(r!=null) {
              currentsonguri = r;
              Intent intent = new Intent(MainActivity.this, MusicPlayerActivity.class);
              intent.setData(r);
              intent.putExtra("flag",0);
              startActivity(intent);

          }
       }

public class myfragment extends FragmentPagerAdapter {

    myfragment(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return fragments[position];
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        String s = "non";
        switch (position)
        {
            case 0 : s= "Tracks" ;
                break;
            case 1: s= "Albums" ;
                break;
            case 2: s= "Artist" ;
                break;
        }
        return s;
    }


}

public void setview(byte [] b, int position,Uri uri)
{
    currentsonguri = uri;
    Log.d("position in set view",""+position);
    Log.d("fail","i am here");
    if(im!=null)
    {
        if(b!=null)
        {
            Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
            bitmap = getRoundedCornerBitmap(bitmap);
            im.setImageBitmap(bitmap);
        }
        else {
            songDetailloader loader = new songDetailloader(context);
            String s = loader.albumartwithalbum(loader.songalbum(position));
            Log.d("fail","fail to set small image");
            if (s != null) {
                im.setImageBitmap(BitmapFactory.decodeFile(s));
                Log.d("fail","nowsetting set small image");
            } else {
                im.setImageResource(R.drawable.default_track_light);
                Log.d("ic","ic_launcher setted");
            }

        }
    }
    else {
        Log.d(""," im is null");
    }
}



public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
            bitmap.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    final RectF rectF = new RectF(rect);
    final float roundPx = 100;

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);

    return output;
}


private ServiceConnection serviceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        MusicService.LocalBinder binder = (MusicService.LocalBinder) service;
        musicService  =  binder.getService();
        mBound =true;
    }

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

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d("MainActivity","Get distoryed");
}

@Override
protected void onResume() {
    super.onResume();
    Intent i = new Intent(this,MusicService.class);
    bindService(i, serviceConnection, Context.BIND_AUTO_CREATE);
}

@Override
protected void onStart() {
    super.onStart();

}


@Override
protected void onStop() {
    super.onStop();
    unbindService(serviceConnection);

}}
public类MainActivity扩展了AppCompatActivity{
私有字符串[]mPlanetTitles={“曲目”、“专辑”、“艺术家”};
私人抽屉布局mDrawerLayout;
私有列表视图mDrawerList;
SharedReferences SharedReferences;
Fragment[]fragments={new TracksFragment(),new AlbumFragment(),new ArtistFragment()};
PagerAdapter PagerAdapter;
查看页面查看页面;
公共静态图像视图;
int pos=-1;
公共静态语境;
音乐服务;音乐服务;
布尔mBound;
表格布局;
公共静态Uri;
创建时受保护的void(最终捆绑包savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedReferences=GetSharedReferences(“lastplayed”,Context.MODE\u PRIVATE);
意图i=新意图(MainActivity.this,MusicService.class);
startService(一);
mDrawerLayout=(抽屉布局)findViewById(R.id.抽屉布局);
mDrawerList=(ListView)findViewById(R.id.left\u抽屉);
setAdapter(新的NavigationDrawerList(this));
mDrawerList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
如果(位置==3)
{
意图i=新意图(MainActivity.this、playlactivity.class);
星触觉(i);
}
如果(位置==4)
{
意图=新意图();
intent.setAction(“android.media.action.DISPLAY\u AUDIO\u EFFECT\u CONTROL\u PANEL”);
if((intent.resolveActivity(getPackageManager())!=null)){
星触觉(意向);
}否则{
//未找到均衡器:(
Toast.makeText(getBaseContext(),“未找到均衡器”,Toast.LENGTH_LONG.show();
}
}
}
});
tabLayout=(tabLayout)findViewById(R.id.tabLayout);
viewPager=(viewPager)findViewById(R.id.viewPager);
tabLayout.setTabTextColors(Color.DKGRAY,Color.WHITE);
tabLayout.setTabMode(tabLayout.MODE可滚动);
context=getBaseContext();
pagerAdapter=新的myfragment(getSupportFragmentManager());
im=(ImageView)findViewById(R.id.currentsong);
setPageTransformer(true,新的ZoomOutPageTransformer());
viewPager.setAdapter(pagerAdapter);
tabLayout.setupWithViewPager(viewPager,true);
SharedReferences.Editor=SharedReferences.edit();
if(SharedReferences.getInt(“计数”,0)=0)
{
编辑:putInt(“count”,1);
}
其他的
{
int c=SharedReferences.getInt(“计数”,0);
d(“使用计数”,c+);
putInt(“count”,c++);
editor.apply();
}
如果(!SharedReferences.getString(“uri”)等于(“”)
{
字符串s=SharedReferences.getString(“uri”,“uri”);
uriu=Uri.parse;
currentsonguri=u;
MediaMetadataRetriever data=新的MediaMetadataRetriever();
setDataSource(getBaseContext(),u);
试一试{
字节[]b=data.getEmbeddedPicture();
位图位图=位图工厂.decodeByteArray(b,0,b.length);
位图=getRoundedCornerBitmap(位图);
设置图像位图(位图);
}
捕获(例外e)
{
e、 printStackTrace();
}
试一试{
setsongbyuri(u,getBaseContext());
musicService.setMediaPlayer();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
其他的
{
}
editor.apply();
im.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(MainActivity.this、MusicLayerActivity.class);
intent.setData(currentsonguri);
意向。额外(“标志”,1);
星触觉(意向);
}
});
最终Uri r=getIntent().getData();
如果(r!=null){
currentsonguri=r;
意向意向=新意向(MainActivity.this、MusicLayerActivity.class);
意图.设定数据(r);
意向。额外(“标志”,0);
星触觉(意向);
}
}
公共类myfragment扩展了FragmentPagerAdapter{
myfragment(FragmentManager fm){
超级(fm);
}
@凌驾
公共片段getItem(int位置){
返回碎片[位置];
}
@凌驾
public int getCount(){
返回3;
}
@凌驾
公共字符序列
public class TracksFragment extends Fragment {
songDetailloader loader = new songDetailloader();
ArrayList<Songs> give = new ArrayList<>();
public int pos = -1;
MediaPlayer mp ;
MusicService musicService;
boolean mBound;
ImageView search;
ListViewAdapter listViewAdapter;
RelativeLayout editreltive;
ListView listView;
EditText editText;
TextView ch;
private Cursor cursor ;
int albumindex,dataindex,titleindex,durationindex,artistindex;
private final static String[] columns ={MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.IS_MUSIC,MediaStore.Audio.Media.IS_RINGTONE,MediaStore.Audio.Media.ARTIST,MediaStore.Audio.Media.SIZE ,MediaStore.Audio.Media._ID};
private final String where = "is_music AND duration > 10000 AND _size <> '0' ";
private final String orderBy =  MediaStore.Audio.Media.TITLE;
public TracksFragment() {

}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d("fragment created","created");
    setRetainInstance(true);


}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState)
{
    View v =inflater.inflate(R.layout.listviewofsongs,container,false);
    listView = (ListView) v.findViewById(R.id.listView);
    allsongs();
    intlistview();
    new Thread(new Runnable() {
        @Override
        public void run() {
            Intent i = new Intent(getActivity(),MusicService.class);
            getActivity().bindService(i, serviceConnection, Context.BIND_AUTO_CREATE);
        }
    }).start();
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
            Log.d("Uri of ",""+give.get(position).getSonguri());
            musicService.setplaylist(give,give.get(position).getPosition());
            musicService.setMediaPlayer();
            view.setSelected(true);
        }
    });
    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            View v =LayoutInflater.from(getContext()).inflate(R.layout.select_dialog_layout,null);
            builder.setView(v);
            builder.setTitle(give.get(position).gettitle()+"\n  "+give.get(position).getalbum());
            builder.create();
            final AlertDialog d=builder.show();

            //seting click listner.....
            TextView play = (TextView) v.findViewById(R.id.dialogplay);
            TextView playnext = (TextView) v.findViewById(R.id.dialogplaynext);
            TextView queue = (TextView) v.findViewById(R.id.dialogqueue);
            TextView fav = (TextView) v.findViewById(R.id.dialogaddtofav);
            TextView album = (TextView) v.findViewById(R.id.dialogalbum);
            TextView artist = (TextView) v.findViewById(R.id.dialogartist);
            TextView playlist = (TextView) v.findViewById(R.id.dialogaddtoplaylsit);
            TextView share = (TextView) v.findViewById(R.id.dialogshare);
            TextView delete = (TextView) v.findViewById(R.id.dialogdelete);
            TextView properties = (TextView) v.findViewById(R.id.dialogproperties);
            play.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    File f= new File(give.get(position).getSonguri().getLastPathSegment());
                    Log.d("LENGTH IS",""+f.length());
                    musicService.setplaylist(give,position);
                    musicService.setMediaPlayer();
                    d.dismiss();
                }
            });
            playnext.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    d.dismiss();

                }
            });
            queue.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    d.dismiss();
                    musicService.insertinqueue(give.get(position));
                }
            });

            fav.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    d.dismiss();
                    DataBaseClass db = new DataBaseClass(getContext());
                    int i=db.insetintoliked(give.get(position));
                    if(i==1)
                    {
                        Toast.makeText(getContext(),"Added to Favorites",Toast.LENGTH_SHORT).show();
                    }
                    else
                        Toast.makeText(getContext(),"Already in Favorites",Toast.LENGTH_SHORT).show();
                }
            });

            album.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    d.dismiss();
                    Intent i = new Intent( getActivity() , AlbumDetail.class);
                    Bundle b= new Bundle();
                    b.putCharSequence("album",give.get(position).getalbum());
                    i.putExtras(b);
                    startActivity(i);
                }
            });

            artist.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i=new Intent(getActivity(),ArtistActivity.class);
                    i.putExtra("artist",give.get(position).getartist());
                    startActivity(i);
                    d.dismiss();

                }
            });
            playlist.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    d.dismiss();

                }
            });
            delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AlertDialog.Builder b = new AlertDialog.Builder(getContext());
                        b.setMessage("Audio '"+give.get(position).gettitle()+"' will be deleted permanently !");
                        b.setTitle("Delete ?");
                        b.setNegativeButton("No", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                d.dismiss();
                            }
                        });
                        b.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                            File f= new File(give.get(position).getSonguri().getPath());
                            boolean b = f.delete();
                            Log.d("Is file exist",f.exists()+"");
                            Log.d("File Lenth",""+f.length());
                            Log.d("Return value",""+b);
                            loader.set(getContext());
                            loader.deleteSong(getContext(),give.get(position).getPosition());
                            give.remove(position); // give is Arraylist of Songs(datatype);
                            listViewAdapter.notifyDataSetChanged();
                            if(b)
                            {
                                Toast.makeText(getContext(),"Deleted",Toast.LENGTH_SHORT).show();
                            }
                            else
                            {
                                Toast.makeText(getContext(),"Fail to Delete",Toast.LENGTH_SHORT).show();
                            }

                        }
                    });
                    b.create().show();
                    d.dismiss();

                }
            });
            share.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    d.dismiss();
                    Intent share = new Intent(Intent.ACTION_SEND);
                    share.setType("audio/*");
                    share.putExtra(Intent.EXTRA_STREAM, give.get(position).getSonguri());
                    startActivity(Intent.createChooser(share, "Share Audio"));
                }
            });
            properties.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AlertDialog.Builder b = new AlertDialog.Builder(getContext());
                    File f= new File(give.get(position).getSonguri().getPath());
                    long size = (f.length())/1024;
                    long mb= size/1024;
                    long kb= size%1024;

                    b.setMessage("Size:"+"\n"+"Size "+mb+"."+kb+" MB\n"+"Path:"+f.getAbsolutePath()+"\n");
                    b.setTitle(f.getName());
                    b.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    });
                    b.create().show();
                    d.dismiss();
                }
            });

            return true;
        }
    });
    return v;
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    Log.d("fragment","instance saved");
}

@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);
    Log.d("Fragment","Instance Restored");
}


public void intlistview()
{
    listViewAdapter = new ListViewAdapter(getContext(),give);
    listView.setAdapter(listViewAdapter);
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.d("Fragment","Destroyed");
    getActivity().unbindService(serviceConnection);
}

private ServiceConnection serviceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        MusicService.LocalBinder binder = (MusicService.LocalBinder) service;
        musicService  =  binder.getService();
        mBound =true;
    }

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


public void allsongs()
{
    cursor = getContext().getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, columns, where, null, orderBy);
    dataindex = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
    albumindex = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
    titleindex = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
    durationindex = cursor.getColumnIndex(MediaStore.Audio.Media.DURATION);
    artistindex = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
    cursor.moveToFirst();
    for(int i=0;i<cursor.getCount();i++)
    {
        Songs song = new Songs();
        song.setalbum(cursor.getString(albumindex));
        song.settitle(cursor.getString(titleindex));
        song.setSonguri(Uri.parse(cursor.getString(dataindex)));
        song.setartist(cursor.getString(artistindex));
        song.setDuration(Long.decode(cursor.getString(durationindex)));
        song.setPosition(cursor.getPosition());
        this.give.add(song);
        cursor.moveToNext();
    }
    cursor.close();

}}
public class AlbumFragment extends Fragment {
songDetailloader songDetailloader  = new songDetailloader();
public AlbumFragment() {
    super();
}
GridView gridView;
AlbumAdapter a;
private static ArrayList<Bitmap> image = new ArrayList<>();
LinearLayout linearLayout;
Cursor cursor ;
ImageView album;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

@Nullable
@Override


public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    final View v =inflater.inflate(R.layout.albumgridview,container,false);
    gridView = (GridView) v.findViewById(R.id.gridview);
    album = (ImageView) v.findViewById(R.id.albumart);
    /*Animation animation = AnimationUtils.loadAnimation(getContext(),R.anim.grid_layout_anim);
    GridLayoutAnimationController controller = new GridLayoutAnimationController(animation,0.2f,0.2f);
    gridView.setLayoutAnimation(controller);*/
    final TextView albumname = (TextView) v.findViewById(R.id.albumname);
    cursor = songDetailloader.getAlbumCursor(getContext());
    if(image.size()==0)
    new getbitmaps().execute();

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String s = songDetailloader.albumart(position);
            Intent i = new Intent( getActivity() , AlbumDetail.class);
            Bundle b= new Bundle();
            b.putCharSequence("album",songDetailloader.album(position));
            i.putExtras(b);
            startActivity(i);
        }
    });
    return v;
  }

public class getbitmaps extends AsyncTask<Void,Void,Void>
{
     Bitmap b;

    public getbitmaps() {
        super();
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    @Override
    protected Void doInBackground(Void... params) {
        for(int i=0;i<cursor.getCount();i++)
        {
            cursor.moveToPosition(i);
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize= 2;
            b=BitmapFactory.decodeFile(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART)),options);
            if(b==null)
            {
                b=BitmapFactory.decodeFile(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART)));

            }
            image.add(b);
        }
        cursor.close();
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        a =new AlbumAdapter(getContext(),image);
        a.setCursor();
        gridView.setAdapter(a);
        new Thread(new Runnable() {
            @Override
            public void run() {
                songDetailloader.set(getContext());
            }
        }).start();

    }
}}
public class ArtistFragment extends Fragment {

ListView listView ;
ArrayList<Artists> aa = new ArrayList<>();
final String[] columns3 = {MediaStore.Audio.Artists._ID, MediaStore.Audio.Artists.ARTIST,MediaStore.Audio.Artists.NUMBER_OF_ALBUMS,MediaStore.Audio.Artists.NUMBER_OF_TRACKS};
final static String orderBy3 = MediaStore.Audio.Albums.ARTIST;
public Cursor cursor3;

public ArtistFragment() {
    super();
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

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

    listView  = (ListView) v.findViewById(R.id.listView);
    new artist().execute();
    return v;
}

public class artist extends AsyncTask<Void, Void ,Void>
{
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        allartist();
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        ArtistAdapter artistAdapter = new ArtistAdapter(getActivity().getBaseContext(),aa);
        listView.setAdapter(artistAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent i= new Intent(getActivity(), ArtistActivity.class);
                i.putExtra("artist", aa.get(position).getArtistname());
                i.putExtra("noofsongs",aa.get(position).getNofosongs());
                startActivity(i);
            }
        });
    }
}

@Override
public void setInitialSavedState(SavedState state) {
    super.setInitialSavedState(state);
}

@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);
}

@Override
public void onDestroy() {
    super.onDestroy();
}

public void allartist()
{
    cursor3 = getContext().getContentResolver().query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, columns3, null, null, orderBy3);
    cursor3.moveToFirst();
    for(int i=0;i< cursor3.getCount() ;i++)
    {
        Artists art = new Artists();
        art.setArtistname(cursor3.getString(cursor3.getColumnIndex(MediaStore.Audio.Artists.ARTIST)));
        art.setNoalbums(Integer.parseInt(cursor3.getString(cursor3.getColumnIndex(MediaStore.Audio.Artists.NUMBER_OF_ALBUMS))));
        art.setNofosongs(Integer.parseInt(cursor3.getString(cursor3.getColumnIndex(MediaStore.Audio.Artists.NUMBER_OF_TRACKS))));
        this.aa.add(art);
        cursor3.moveToNext();
    }
    cursor3.close();
}}
viewPager.setOffscreenPageLimit(fragments.size());
@Override
public int getItemPosition(Object object) {    
    return POSITION_NONE;    
}
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    int previousState;
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {

        if (previousState == ViewPager.SCROLL_STATE_SETTLING && state == ViewPager.SCROLL_STATE_IDLE) {

            pagerAdapter.notifyDataSetChanged();

        }
        previousState = state;
    }
});