Android List view refresh

前端 未结 5 554
闹比i
闹比i 2020-11-27 19:02

I have one ListView which is showing me some data through an array (which is in another class and I\'m accessing it through it\'s object).

Whenever I delete an elem

相关标签:
5条回答
  • 2020-11-27 19:39

    Try getListView().refreshDrawableState

    0 讨论(0)
  • 2020-11-27 19:49

    You have to notify your ListView adapter that the data has changed.

    listViewAdapater.notifyDataSetChanged();
    

    If that for some reason doesn't work and there are some wierd situations where it seems like it wasn't notifying, you can just reassign your adapter via the constructor with the updated array.

    0 讨论(0)
  • 2020-11-27 19:53
        private static ArrayList<Radio> m_streamsList;
    
        final ListView listView = (ListView) rootView.findViewById(R.id.stream_listRS);
    
        //my class where i insert data into my array
        m_myDBHelp = new DBHelper();
        m_streamsList = m_myDBHelp.selectStreamsList();
    
        // my list adapter - this is a class created by me
        RadioAdapter adapt = new RadioAdapter(context, m_streamsList);
        listView.setAdapter(adapt);
    
        ////////////------------- so . when i inserted a row in db, i need to refresh the list
        m_myDBHelp.insertStreamIntoDB(String name, String url);
        /// in my case method invalidate works fine
        listView.invalidate();
        m_streamsList = null;
        m_streamsList = m_myDBHelp.selectStreamsList();
    
        //you need to set adapter again
        RadioAdapter adapt2 = new RadioAdapter(context, m_streamsList);
        listView.setAdapter(adapt2);
    
    
    
    
    
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    import com.example.npopa.musicplayern.R;
    import com.example.npopa.musicplayern.Radio;
    
    import java.util.ArrayList;
    
    public class RadioAdapter extends BaseAdapter{
    private ArrayList<Radio> m_streams;
    private LayoutInflater m_stramInf;
    
    public RadioAdapter(Context c, ArrayList<Radio> theStreams){
        m_streams = theStreams;
        m_stramInf = LayoutInflater.from(c);
    }
    
    @Override
    public int getCount() {
        return m_streams.size();
    }
    
    @Override
    public Object getItem(int arg0) {
        return null;
    }
    
    @Override
    public long getItemId(int arg0) {
        return 0;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //map to radio_s layout
        LinearLayout streamLay = (LinearLayout) m_stramInf.inflate(R.layout.all_songs_t, parent, false);
    
        TextView name = (TextView) streamLay.findViewById(R.id.song_title);
        TextView url = (TextView) streamLay.findViewById(R.id.song_artist);
        ImageView imgALb = (ImageView) streamLay.findViewById(R.id.albumicon);
    
        //get all_songs_t using position
        Radio currStream = m_streams.get(position);
        name.setText(currStream.getName());
        url.setText(currStream.getUrl());
        imgALb.setImageResource(R.drawable.radio_stream);
    
        //set position as tag
        streamLay.setTag(position);
        return streamLay;
    }
    

    }

    public class Radio {
    private int id;
    private String name;
    private String url;
    
    public Radio(int id, String name, String url) {
        this.id = id;
        this.name = name;
        this.url = url;
    }
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getUrl() {
        return url;
    }
    
    public void setUrl(String url) {
        this.url = url;
    }
    }
    
    0 讨论(0)
  • 2020-11-27 19:54

    I have no notifyDataSetChanged() method (Android 2.3).

    The following worked for me:

    getListView().invalidate();
    

    In my case I have changed the whole adapter and it still didn't refresh, so for me the method described above is the only working solution.

    0 讨论(0)
  • 2020-11-27 19:56

    List refreshing for me: listView.invalidateViews();

    It'll do:

    mDataChanged = true;
    rememberSyncState();
    requestLayout();
    invalidate();
    

    The case as to manage some list item removal or removal all element at once.

    Tested in API 24.

    0 讨论(0)
提交回复
热议问题