我有三个片段类,每个都有自己的自定义适配器(我使用这三个片段和ViewPager。)
//Fragment class 1
static MyListAdapterArtists myListAdapterArtists;
//Fragment class 2
static MyListAdapterTracks myListAdapterTracks;
//Fragment class 3
static MyGridViewAdapter myGridViewAdapter;
所有三个适配器都基于相同的基础数据。我想在同一个班级中的任何一个上打notifyDataSetChanged()
。所以我将它们传递给UpdateAdapters
班。
//Fragment class 1
UpdateAdapters.getInstance().setAdapterOne(adapter);
//Fragment class 2
UpdateAdapters.getInstance().setAdapterTwo(adapter);
//Fagment class 3
UpdateAdapters.getInstance().setAdapterThree(gridAdapter);
这是UpdateAdapters
类
public class UpdateAdapters {
private static UpdateAdapters instance = null;
private MyListAdapterArtists myListAdapterArtists;
private MyListAdapterTracks myListAdapterTracks;
private MyGridViewAdapter myGridViewAdapter;
//Constructor
protected UpdateAdapters() { }
//Get the current instance
public static UpdateAdapters getInstance() {
if (instance == null) {
// create a new one if it doesn't exist
instance = new UpdateAdapters();
}
return instance;
}
//Setters
public void setAdapterOne(MyListAdapterTracks myListAdapterTracks){
this.myListAdapterTracks = myListAdapterTracks;
}
public void setAdapterTwo(MyListAdapterArtists myListAdapterArtists){
this.myListAdapterArtists = myListAdapterArtists;
}
public void setAdapterThree(MyGridViewAdapter myGridViewAdapter){
this.myGridViewAdapter = myGridViewAdapter;
}
//Public methods
public void update(){
myListAdapterArtists.notifyDataSetChanged();
myListAdapterTracks.notifyDataSetChanged();
myGridViewAdapter.notifyDataSetChanged();
}
我可以单独更新任何适配器
UpdateAdapters.getInstance().update();
视图更新几乎完美,但我的列表视图中的视图仅在我将其滚出屏幕后才更新。网格视图的视图工作正常并在屏幕上更新。
我尝试将list-views传递给更新适配器类,并使视图无效
adapterTracks.notifyDataSetChanged();
MyListViewTracks.invalidate();
但这也不起作用。
我的适配器类看起来彼此没有任何不同。它们实际上是一样的。
我读了here on SO,这可能是一个平台问题,我应该创建一个自定义列表视图。我不确定如何将该建议合并到我的代码中。有人想试一试吗?
由于
AdapterGridView
上课
public class AdapterGridView extends ArrayAdapter<AlbumObject> {
Context context;
int layoutResourceId;
ArrayList<AlbumObject> albumObjectList;
public AdapterGridView(Context context, int layoutResourceId, ArrayList<AlbumObject> albumObjectList) {
super(context, layoutResourceId, albumObjectList);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.albumObjectList = albumObjectList;
}
static class ViewHolder {
static ImageView albumArt;
static TextView albumTitle;
static TextView artist;
static TextView title;
//static TextView data;
static TextView duration;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
AlbumObject albumObject = albumObjectList.get(position);
ViewHolder viewHolder; // view lookup cache stored in tag
// if an existing view is not being reused
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.item_grid_view, parent, false);
convertView.setTag(viewHolder);
// if an existing view is being reused
} else {
viewHolder = (ViewHolder) convertView.getTag();
//viewHolder.albumArt = null;
}
viewHolder.albumTitle = (TextView) convertView.findViewById(R.id.gridViewAlbumTitle);
viewHolder.albumArt = (ImageView) convertView.findViewById(R.id.gridViewAlbumArt);
viewHolder.albumTitle.setText(albumObject.albumTitle);
if(albumObject.albumArtURI != null){
File f = new File(albumObject.songObjectList.get(0).albumArtURI);
Picasso.with(viewHolder.albumArt.getContext())
.load(f)
.transform(new CircleTransform())
.placeholder(R.drawable.blackcircle).fit().centerCrop()
.into(viewHolder.albumArt);
} else {
Picasso.with(viewHolder.albumArt.getContext())
.load(R.drawable.blackcircle)
//.transform(new CircleTransform())
.placeholder(R.drawable.blackcircle)
.into(viewHolder.albumArt);
}
return convertView;
}
}
AdapterTracks类
public class AdapterTracks extends ArrayAdapter<SongObject> {
Context context;
int layoutResourceId;
ArrayList<SongObject> songObjectList;
Activity activity;
public static RequestQueue mRequestQueue;
public static RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(MainActivity.getAppContext());
}
return mRequestQueue;
}
public AdapterTracks(Context ctx, int layoutResourceId, ArrayList<SongObject> songObjectList) {
super(ctx, layoutResourceId, songObjectList);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.songObjectList = songObjectList;
this.activity = (Activity) ctx;
}
static class ViewHolder {
static ImageView albumArt;
static TextView album;
static TextView artist;
static TextView title;
//static TextView data;
static TextView duration;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
SongObject songObject = songObjectList.get(position);
ViewHolder viewHolder; // view lookup cache stored in tag
// if an existing view is not being reused
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.item_list_view, parent, false);
convertView.setTag(viewHolder);
// if an existing view is being reused
} else {
viewHolder = (ViewHolder) convertView.getTag();
//viewHolder.albumArt = null; // Prevents recycling from overlapping list item contents
}
viewHolder.artist = (TextView) convertView.findViewById(R.id.artist);
viewHolder.title = (TextView) convertView.findViewById(R.id.title);
viewHolder.albumArt = (ImageView) convertView.findViewById(R.id.album_art);
viewHolder.artist.setText(songObject.artist);
viewHolder.title.setText(songObject.songTitle);
if(songObject.albumArtURI != null){
File f = new File(songObject.albumArtURI);
Picasso.with(viewHolder.albumArt.getContext())
.load(f)
.transform(new CircleTransform())
.placeholder(R.drawable.blackcircle).fit().centerCrop()
.into(viewHolder.albumArt);
} else {
Picasso.with(viewHolder.albumArt.getContext())
.load(R.drawable.blackcircle)
.transform(new CircleTransform())
.placeholder(R.drawable.blackcircle)
.into(viewHolder.albumArt);
}
return convertView;
}
}