必须滚动视图关闭屏幕以更新列表视图内容

时间:2015-12-24 02:13:12

标签: android android-listview

我有三个片段类,每个都有自己的自定义适配器(我使用这三个片段和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;
    }
}

0 个答案:

没有答案